您现在的位置是:首页 >技术杂谈 >springboot工作原理解析网站首页技术杂谈

springboot工作原理解析

旧言. 2024-06-17 10:14:41
简介springboot工作原理解析

Spring Boot 是基于 Spring 框架的快速开发框架,它的目标是简化 Spring 应用程序的搭建和开发过程。Spring Boot 通过自动配置、快速启动、独立部署、多种数据源支持、集成测试等功能,使用springboot可快速构建高效、可靠的程序

1. 自动配置

底层实现涉及到 Spring Boot Starter、Spring Boot Auto-configuration 和 Spring Boot Properties 三个方面。

1.1 Spring Boot Starter

Spring Boot Starter 是一组预先配置好的依赖库,用于快速启动一个特定的功能,例如 Spring Boot Starter Web 包含了 Spring MVC、Tomcat 和 Jackson 等依赖库,用于快速启动一个 Web 应用程序。

1.2 Spring Boot Auto-configuration

Spring Boot Auto-configuration 是一组自动配置规则,用于自动配置 Spring 应用程序的组件。当应用程序依赖了某个 Starter,Spring Boot 会根据 Starter 的功能自动加载对应的 Auto-configuration,根据 Auto-configuration 中的条件进行自动配置,例如加载对应的 Bean、设置默认属性等。

1.3 Spring Boot Properties

Spring Boot Properties 是应用程序属性的配置文件。通过在 application.properties 或 application.yml 中配置属性,可以自定义应用程序的配置信息。Spring Boot 支持通过自动绑定将这些属性绑定到应用程序的配置类中,实现属性的自动配置。

总结:Spring Boot Starter 提供了预先配置好的依赖库,Spring Boot Auto-configuration 提供了自动配置规则,Spring Boot Properties 提供了应用程序属性的配置文件,通过这些机制,可以快速、简单地配置 Spring 应用程序。

2. 快速启动

通过内嵌 Web 容器、自动配置、预热机制和应用程序上下文缓存等多种机制来实现

2.1 内嵌 Web 容器

Spring Boot 默认内嵌了多个 Web 容器,如 Tomcat、Jetty、Undertow 等。在应用程序启动时,Spring Boot 会根据类路径中的依赖库选择一个合适的 Web 容器,并在内存中启动这个容器,不需要手动安装和配置 Web 容器,从而减少了启动时间。

2.2 自动配置

Spring Boot 通过自动配置机制来减少应用程序的配置工作。Spring Boot 在启动时会检查类路径下的依赖库,根据不同的 Starter 加载对应的 Auto-configuration,自动配置应用程序的组件,如数据库、Web、缓存等,这些组件都是预先配置好的,不需要手动配置,从而减少了启动时间。

2.3 预热机制

Spring Boot 还提供了预热机制,即在应用程序启动之前预加载一些类和资源,以减少首次访问时的启动时间。例如,当应用程序启动时,Spring Boot 会自动预热静态资源,如 CSS、JS 等,这些资源会被缓存到内存中,从而加速后续访问。

2.4 应用程序上下文缓存

Spring Boot 提供了内置的应用程序上下文缓存机制,当应用程序启动时,Spring Boot 会将应用程序的上下文缓存到内存中,这样就可以在多次启动应用程序时,避免重新加载上下文,从而减少启动时间。

3. 独立部署

独立部署是通过将应用程序打包成可执行的JAR文件,并将其与配置文件一起部署,然后通过命令行启动应用程序来实现的。这种方式简化了应用程序的部署和运维,使得应用程序可以在不同的环境中快速、可靠地运行。

3.1 打包应用程序

使用Maven或Gradle等构建工具将应用程序打包成可执行的JAR文件。打包过程中可以使用Spring Boot Maven插件或Gradle插件来简化打包配置和生成可执行JAR文件。

3.2 配置应用程序

创建一个包含应用程序所需配置的属性文件(如application.properties或application.yml),并将其与打包好的JAR文件放在同一目录下。

3.3 启动应用程序

在命令行终端中使用java -jar命令启动应用程序。在启动过程中,Spring Boot将加载应用程序的配置文件,并启动嵌入式的Tomcat或Jetty服务器,使得应用程序可以通过HTTP或HTTPS协议访问。

3.4 管理应用程序

通过Spring Boot Actuator提供的端点可以实现对应用程序的管理和监控,例如查看应用程序的健康状况、修改日志级别、重新加载配置等。

4. 多种数据源支持

Spring Boot提供了多种数据源支持的方式,包括MySQL、Oracle、PostgreSQL等关系型数据库,以及MongoDB、Redis等非关系型数据库。可以根据实际需要选择并配置不同的数据源,从而支持应用程序对多种数据源的访问。

4.1 依赖添加:

在Maven或Gradle的配置文件中,添加相应的数据库驱动依赖和Spring Boot对应的数据源依赖

<dependency>
    <groupId>com.mysql.cj</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

4.2 配置数据源

根据不同的数据源类型,配置相应的数据源配置

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

4.3 创建数据源Bean

在Java代码中,通过注解@Configuration和@Bean创建不同的数据源Bean

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.second-datasource")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }
}

其中,@ConfigurationProperties注解可以将配置文件中的属性与Java对象的属性自动绑定起来,@Bean注解可以将方法的返回值作为一个Bean注册到Spring容器中。

4.4 使用数据源

使用@Qualifier注解和@Autowired注解来指定和注入不同的数据源Bean

@Service
public class MyService {
    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;

    @Autowired
    @Qualifier("secondDataSource")
    private DataSource secondDataSource;

    // ...
}

5. 集成测试

Spring Boot集成测试的编写和运行,从而验证应用程序的功能和行为是否符合预期。集成测试可以帮助开发人员发现和解决应用程序中的问题,提高代码质量和可靠性。

5.1 添加测试依赖

Maven中添加Spring Boot测试依赖

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

5.2 编写测试类

@SpringBootTest和@RunWith注解用来指定测试类运行时所需要的Spring Boot上下文和测试运行器

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyIntegrationTest {
    // ...
}

@SpringBootTest注解可以指定Spring Boot应用程序的入口类或配置文件路径,从而启动一个测试用例所需要的Spring Boot上下文环境。

5.3 编写测试方法

在代码中编写测试方法来验证应用程序的行为是否符合预期

@Test
public void testMyService() {
    // Given
    // ... prepare test data

    // When
    // ... invoke the service

    // Then
    // ... assert the result
}

@Test注解用于标识一个测试方法,可以使用JUnit或其他测试框架来运行测试。

在运行测试的过程中,Spring Boot会启动一个嵌入式的Web服务器和数据库等资源,以模拟实际的应用程序环境,从而进行集成测试。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。