从零开始:Spring Boot核心概念与架构解析

引言

在当今的Java开发领域,Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点,极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手,深入解析其架构设计和运行原理,帮助读者从零开始全面理解Spring Boot。

一、Spring Boot简介

1.1 什么是Spring Boot?

Spring Boot是由Pivotal团队提供的基于Spring框架的全新开源Java基础框架。它旨在简化Spring应用的初始搭建以及开发过程,让开发者能够更专注于业务逻辑的实现,而不是繁琐的配置。

Spring Boot的核心目标包括:

  • 简化配置:通过自动配置机制,Spring Boot能够根据项目依赖自动配置Spring和相关技术,从而减少开发者需要编写的配置代码。

  • 独立运行:Spring Boot内置了Tomcat、Jetty等嵌入式Servlet容器,无需部署WAR文件,应用可以直接以jar包形式运行。

  • 非侵入式:Spring Boot不会限制你使用特定的类加载器、线程工厂或任何其他特定的系统属性,它完全非侵入式。

  • 生产就绪:Spring Boot提供了生产级功能,如健康检查、指标收集、应用监控等,帮助开发者更好地管理应用。

1.2 Spring Boot的版本与兼容性

Spring Boot自发布以来,经历了多个版本的迭代。截至本文撰写时,Spring Boot 3.x已经广泛应用于生产环境。Spring Boot 3.x基于Spring Framework 6.x开发,支持Java 17及以上版本,并且对Spring Cloud、Spring Data等子项目进行了深度集成和优化。

在选择Spring Boot版本时,建议根据项目需求和团队技术栈选择合适的版本。对于新项目,推荐使用最新的稳定版本,以获得更好的性能和功能支持。

1.3 Spring Boot与Spring框架的关系

Spring Boot是基于Spring框架的扩展,它并非替代Spring,而是简化了Spring应用的开发过程。Spring Boot的核心是Spring框架,它继承了Spring的依赖注入、事务管理、AOP等功能,并在此基础上提供了自动配置、独立运行等特性。

二、Spring Boot的核心概念

2.1 Spring Boot的启动流程

Spring Boot应用的启动流程是理解其核心机制的关键。一个典型的Spring Boot应用从main方法开始,通过SpringApplication类启动。以下是启动流程的简化步骤:

  1. 创建SpringApplication实例SpringApplication是Spring Boot应用的启动入口,它负责初始化Spring应用上下文。

  2. 加载配置:Spring Boot会加载application.propertiesapplication.yml中的配置,并将其注入到Spring应用上下文中。

  3. 自动配置:Spring Boot通过@EnableAutoConfiguration注解自动配置Spring应用,根据项目依赖自动加载相关的配置类。

  4. 初始化应用上下文:Spring Boot会创建一个ApplicationContext,并加载所有的Bean。

  5. 启动嵌入式容器:如果项目中包含嵌入式Servlet容器(如Tomcat),Spring Boot会自动启动容器并监听指定端口。

2.2 @SpringBootApplication注解

@SpringBootApplication是Spring Boot的核心注解,它是一个组合注解,包含了以下三个注解:

  • @SpringBootConfiguration:标识当前类是一个Spring Boot配置类,等同于Spring中的@Configuration注解。

  • @EnableAutoConfiguration:启用Spring Boot的自动配置机制,根据项目依赖自动加载相关的配置类。

  • @ComponentScan:启用组件扫描,扫描当前包及其子包中的Spring组件(如@Controller@Service@Repository等)。

java复制

@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

2.3 自动配置原理

自动配置是Spring Boot的核心特性之一。Spring Boot通过@EnableAutoConfiguration注解启用自动配置机制。在启动时,Spring Boot会扫描META-INF/spring.factories文件,加载其中定义的自动配置类。

这些自动配置类通常以*AutoConfiguration结尾,例如DataSourceAutoConfigurationJpaAutoConfiguration等。每个自动配置类都通过条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)判断是否需要加载某个配置。

例如,当项目中包含spring-boot-starter-web依赖时,Spring Boot会自动加载WebMvcAutoConfiguration,从而配置Spring MVC相关的Bean。

2.4 配置文件

Spring Boot支持多种配置文件格式,包括application.propertiesapplication.yml。配置文件用于定义应用的运行参数,如数据库连接信息、服务器端口、日志配置等。

application.properties文件是一个简单的键值对文件,例如:

properties复制

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

application.yml文件支持嵌套结构,更适合复杂的配置需求,例如:

yaml复制

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456

Spring Boot会优先加载application.properties文件,如果同时存在application.yml文件,则application.yml中的配置会覆盖application.properties中的同名配置。

2.5 Profile配置

Profile是Spring Boot用于管理不同环境配置的功能。通过Profile,开发者可以为开发、测试和生产环境定义不同的配置文件,例如application-dev.propertiesapplication-test.propertiesapplication-prod.properties

在启动应用时,可以通过spring.profiles.active参数指定当前激活的Profile。例如:

properties复制

# application.properties
spring.profiles.active=dev

或者通过命令行参数指定:

bash复制

java -jar myapp.jar --spring.profiles.active=prod

2.6 Starter模块

Starter模块是Spring Boot的核心组件之一,它提供了一种“一站式”的依赖管理方式。通过引入Starter模块,开发者可以快速集成Spring Boot提供的各种功能,而无需手动管理复杂的依赖。

例如,spring-boot-starter-web模块提供了Spring MVC和嵌入式Servlet容器的依赖,开发者只需在pom.xml中添加以下依赖即可:

xml复制

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot提供了多种Starter模块,涵盖了Web开发、数据访问、消息队列、安全等多个领域。开发者可以根据项目需求选择合适的Starter模块。

2.7 嵌入式Servlet容器

Spring Boot内置了Tomcat、Jetty和Undertow等嵌入式Servlet容器,开发者无需单独部署WAR文件,应用可以直接以jar包形式运行。默认情况下,Spring Boot使用Tomcat作为嵌入式容器。

嵌入式容器的配置可以通过application.properties文件进行自定义,例如:

properties复制

server.port=8080
server.servlet.context-path=/myapp

如果需要切换到其他嵌入式容器,可以通过排除默认的Tomcat依赖并引入其他容器的依赖来实现。例如,切换到Jetty:

xml复制

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

三、Spring Boot的架构设计

3.1 Spring Boot的分层架构

Spring Boot的架构设计遵循了经典的分层架构模式,主要包括以下几个层次:

  • 控制层(Controller):负责处理HTTP请求,返回响应。通常使用@Controller@RestController注解定义。

  • 服务层(Service):负责业务逻辑的实现,通常使用@Service注解定义。

  • 持久层(Repository):负责数据访问,通常使用@Repository注解定义。

  • 实体层(Entity):定义业务对象的模型,通常使用JPA注解定义。

  • 配置层(Configuration):负责定义Spring应用的配置,通常使用@Configuration注解定义。

这种分层架构模式使得Spring Boot应用具有良好的可扩展性和可维护性。

3.2 Spring Boot的依赖管理

Spring Boot的依赖管理是通过Maven或Gradle实现的。Spring Boot提供了一个统一的依赖管理模块spring-boot-dependencies,它定义了Spring Boot及其相关项目的核心依赖版本。

pom.xml文件中,开发者可以通过引入spring-boot-starter-parent父项目来继承这些依赖管理配置:

xml复制

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
</parent>

通过这种方式,开发者可以避免手动管理复杂的依赖版本,同时确保项目依赖的一致性。

3.3 Spring Boot的插件机制

Spring Boot提供了强大的插件机制,通过spring-boot-maven-pluginspring-boot-gradle-plugin,开发者可以方便地将Spring Boot应用打包为可执行jar文件。

例如,在Maven项目中,可以通过以下配置将应用打包为可执行jar文件:

xml复制

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

在Gradle项目中,可以通过以下配置实现相同的功能:

groovy复制

plugins {
    id 'org.springframework.boot' version '3.0.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

通过插件机制,Spring Boot简化了应用的打包和部署过程,使得开发者可以更加专注于业务逻辑的实现。

3.4 Spring Boot的健康检查与监控

Spring Boot提供了丰富的健康检查和监控功能,通过spring-boot-actuator模块,开发者可以轻松地监控应用的运行状态。

spring-boot-actuator模块提供了多种端点(Endpoint),用于暴露应用的健康信息、指标数据、配置信息等。例如,/actuator/health端点可以返回应用的健康状态,/actuator/metrics端点可以返回应用的性能指标。

开发者可以通过application.properties文件自定义端点的访问路径和安全性,例如:

properties复制

management.endpoints.web.base-path=/manage
management.endpoint.health.probes.enabled=true
management.health.livenessState.enabled=true

通过健康检查和监控功能,开发者可以更好地管理Spring Boot应用的运行状态,及时发现和解决问题。

四、Spring Boot的高级特性

4.1 数据访问与JPA

Spring Boot提供了对多种数据访问技术的支持,包括JPA、MyBatis、JDBC等。其中,JPA(Java Persistence API)是最常用的ORM框架之一。

Spring Boot通过spring-boot-starter-data-jpa模块提供了对JPA的支持。开发者可以通过定义实体类和仓库接口(Repository)来实现数据访问功能。

例如,定义一个用户实体类:

java复制

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // 省略getter和setter方法
}

定义一个用户仓库接口:

java复制

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}

通过这种方式,Spring Boot会自动实现UserRepository接口,并提供基本的CRUD操作以及自定义查询方法。

4.2 安全与Spring Security

Spring Boot通过spring-boot-starter-security模块提供了对Spring Security的支持。Spring Security是一个功能强大的安全框架,用于保护Spring应用免受各种安全威胁。

开发者可以通过定义安全配置类来实现用户认证、授权、密码加密等功能。例如:

java复制

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasRole("USER")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .httpBasic();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}password").roles("USER")
            .and()
            .withUser("admin").password("{noop}password").roles("ADMIN");
    }
}

通过Spring Security,开发者可以轻松地实现用户登录、角色授权、密码加密等功能,从而保护Spring Boot应用的安全性。

4.3 微服务与Spring Cloud

Spring Boot与Spring Cloud结合,可以构建强大的微服务架构。Spring Cloud提供了一系列的微服务开发工具,包括服务注册与发现、配置中心、API网关、断路器等。

例如,通过spring-cloud-starter-netflix-eureka-client模块,开发者可以将Spring Boot应用注册到Eureka服务注册中心:

xml复制

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.properties文件中配置Eureka服务地址:

properties复制

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

通过这种方式,Spring Boot应用可以轻松地实现服务注册与发现,从而构建微服务架构。

4.4 异步编程与WebFlux

Spring Boot 2.x引入了WebFlux模块,支持响应式编程模型。WebFlux基于Reactor框架,提供了异步、非阻塞的编程方式,适用于高并发场景。

开发者可以通过定义响应式控制器来实现异步请求处理:

java复制

@RestController
public class ReactiveController {
    @GetMapping("/reactive")
    public Mono<String> reactive() {
        return Mono.just("Hello, WebFlux!");
    }
}

通过WebFlux,开发者可以实现高性能的异步应用,提升系统的吞吐量和响应速度。

4.5 定时任务与@Scheduled

Spring Boot支持定时任务的开发,通过@Scheduled注解,开发者可以定义定时执行的任务。例如:

java复制

@Configuration
@EnableScheduling
public class ScheduledTasks {
    @Scheduled(fixedRate = 5000)
    public void fixedRateJob() {
        System.out.println("Fixed rate job executed at: " + new Date());
    }

    @Scheduled(cron = "0 0/30 * * * ?")
    public void cronJob() {
        System.out.println("Cron job executed at: " + new Date());
    }
}

通过@Scheduled注解,开发者可以轻松地实现定时任务,满足业务需求。

五、Spring Boot的性能优化

5.1 启动性能优化

Spring Boot应用的启动速度是影响开发效率的重要因素之一。以下是一些优化启动性能的建议:

  • 减少依赖:避免引入不必要的依赖,减少Spring应用上下文的初始化时间。

  • 延迟加载Bean:通过@Lazy注解延迟加载Bean,减少应用启动时的内存占用。

  • 优化自动配置:通过@Conditional注解优化自动配置类的加载条件,避免不必要的配置加载。

  • 使用JVM参数优化启动:通过设置JVM参数(如-XX:TieredStopAtLevel=1)优化JVM的启动性能。

5.2 运行性能优化

Spring Boot应用的运行性能直接影响用户体验。以下是一些优化运行性能的建议:

  • 使用缓存:通过@Cacheable注解缓存重复计算的结果,减少数据库访问次数。

  • 优化数据库访问:使用连接池(如HikariCP)优化数据库连接管理,减少数据库访问延迟。

  • 异步处理:通过@Async注解实现异步任务处理,提升应用的响应速度。

  • 使用响应式编程:通过WebFlux实现异步、非阻塞的请求处理,提升系统的吞吐量。

5.3 部署性能优化

Spring Boot应用的部署方式也会影响性能。以下是一些优化部署性能的建议:

  • 使用嵌入式容器:使用嵌入式Servlet容器(如Tomcat)部署应用,减少部署复杂度。

  • 优化打包配置:通过spring-boot-maven-pluginspring-boot-gradle-plugin优化应用的打包配置,减少打包时间。

  • 使用容器化部署:通过Docker容器化部署应用,实现环境一致性,减少部署问题。

六、Spring Boot的常见问题与解决方案

6.1 自动配置冲突

当项目中存在多个自动配置类时,可能会导致配置冲突。解决方法是通过@Conditional注解定义配置类的加载条件,避免不必要的配置加载。

6.2 性能问题

如果Spring Boot应用出现性能问题,可以通过以下方式排查和解决:

  • 使用监控工具:通过Spring Boot Actuator监控应用的运行状态,查找性能瓶颈。

  • 优化代码:通过代码分析工具(如JProfiler)优化应用的代码逻辑,减少不必要的计算。

  • 优化配置:通过优化数据库配置、缓存配置等提升应用的性能。

6.3 安全问题

如果Spring Boot应用存在安全漏洞,可以通过以下方式解决:

  • 使用Spring Security:通过Spring Security实现用户认证、授权等功能,保护应用的安全性。

  • 使用HTTPS:通过HTTPS加密通信数据,防止数据泄露。

  • 定期更新依赖:定期更新Spring Boot及其相关依赖,修复已知的安全漏洞。

七、Spring Boot的未来发展方向

7.1 云原生支持

随着云原生技术的发展,Spring Boot也在不断加强与云原生技术的结合。例如,Spring Boot 3.x已经对Kubernetes提供了更好的支持,包括自动配置、健康检查、服务发现等功能。

7.2 响应式编程

响应式编程是Spring Boot未来的重要发展方向之一。通过WebFlux模块,Spring Boot支持异步、非阻塞的编程方式,适用于高并发场景。

7.3 微服务架构

微服务架构是现代应用开发的重要趋势之一。Spring Boot与Spring Cloud结合,可以构建强大的微服务架构,满足企业级应用的需求。

八、总结

Spring Boot作为Spring框架的扩展,极大地简化了Spring应用的开发过程。通过自动配置、独立运行、非侵入式等特性,Spring Boot让开发者能够更加专注于业务逻辑的实现。本文从Spring Boot的核心概念入手,深入解析了其架构设计和运行原理,希望对读者有所帮助。

在实际开发中,开发者可以根据项目需求选择合适的Spring Boot版本和功能模块,通过优化配置和代码实现高性能、高可用的Spring Boot应用。同时,随着云原生技术、响应式编程和微服务架构的发展,Spring Boot也在不断演进,为开发者提供了更强大的功能和更好的开发体验。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

7、数组知识点汇总

一、 数组基本概念 程序算法数据结构 算法&#xff1a;解决程序的流程步骤数据结构&#xff1a;将数据按照某种特定的结构来存储设计良好的数据结构会导致良好的算法。ArrayList、LinkedList 数组是最简单的数据结构。 1、数组&#xff1a; 数组&#xff1a;存放同一种类型…

计算机网络 (48)P2P应用

前言 计算机网络中的P2P&#xff08;Peer to Peer&#xff0c;点对点&#xff09;应用是一种去中心化的网络通信模式&#xff0c;它允许设备&#xff08;或节点&#xff09;直接连接并共享资源&#xff0c;而无需传统的客户端-服务器模型。 一、P2P技术原理 去中心化架构&#…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备 2.1 依赖配置 3. WebClient配置 3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例 4.1 基本请求操…

持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签

增加复制按钮后的界面是这样的 代码如下&#xff1a; <template><view><x-header></x-header><view class"" v-if"article_info"><view class"kuai bgf"><view class"ac fs26"><img sr…

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

启动虚拟机中客户机后导致电脑蓝屏的解决办法

不考虑重新安装虚拟机的解决办法有两种&#xff1a; vmx文件破损时使用 1&#xff09;删除CentOS 64-bit.vmx文件 2&#xff09;打开vmware-0.log文件&#xff0c;找到CONFIGURATION 和 USER DEFAULTS 并把这两个之间的内容拷贝出来 删除框出来的部分&#xff0c;复制框出来的…

Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析 1. CBOW模型概述 CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说&#xff0c;给定当前单词的上下文单词&#xff0c;通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。 2. 模型结构 CB…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

MySql字段的值是以逗号隔开的另一个表的主键关联查询

查询sql SELECT s.student_id, s.name, c.name as course_name FROM student s INNER JOIN course c ON FIND_IN_SET(c.course_id, s.course_id) > 0 WHERE 1 1;相似sql -- 翻译&#xff08;需要带条件&#xff0c;可用于字典翻译&#xff0c;但条件需要注意唯一性&#…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计

据悉&#xff0c;QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间&#xff0c;QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验&#xff08;微机原理与接口技术题解及实验指导&#xff0c;吴宁版本13章&#xff09;&#xff0c;中间出了挺多问题&#xff0c;解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出&#xff0c;只好把子电路拿…

外部flash烧写算法学习笔记(一)

一&#xff0c;STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二&#xff0c;QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了&#xff0c;含MDK下载算法制作和STM32CubeProg下载算法制作 …

在centos上编译安装opensips【初级-默认安装】

环境&#xff1a;centos9 last opensips3.2 dnf update -y dnf install -y gcc make git automake libtool pcre-devel libxml2-devel \libcurl-devel postgresql-devel \bzip2-devel zlib-devel ncurses-devel libuuid-devel \libpcap-devel # 有报错的直接删除cd /usr/lo…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…