Spring-自动装配-Druid的核心jar包和对应的Starter包是如何配合然后实现自动装配的

Druid 的核心 JAR 包和对应的 Spring Boot Starter 包通过以下方式配合实现自动装配:


1. 核心组件分工

组件作用
Druid 核心 JAR 包 提供数据库连接池实现、SQL 监控、防御注入等核心功能(如 druid-1.2.8.jar)。
Druid Spring Boot Starter 封装自动配置逻辑,将 Druid 无缝集成到 Spring Boot 应用(如 druid-spring-boot-starter-1.2.8.jar)。

2. 自动装配流程

步骤 1:引入 Starter 依赖

在 pom.xml 中添加 Starter:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

步骤 2:Spring Boot 加载自动配置类

  • 入口文件
    Starter 包中的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 声明自动配置类:

     
    com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

     

  • 自动配置类逻辑

    @Configuration
    @ConditionalOnClass(DruidDataSource.class)  // 当类路径存在 DruidDataSource 时生效
    @AutoConfigureBefore(DataSourceAutoConfiguration.class) // 在 Spring Boot 默认数据源配置前执行
    @EnableConfigurationProperties(DruidStatProperties.class) // 绑定配置属性
    public class DruidDataSourceAutoConfigure {
    
        @Bean
        @ConditionalOnMissingBean
        public DataSource dataSource() {
            return new DruidDataSourceWrapper(); // 创建 Druid 数据源实例
        }
    
        // 配置监控页面(如 /druid/sql.html)
        @Bean
        @ConditionalOnProperty("spring.datasource.druid.stat-view-servlet.enabled")
        public ServletRegistrationBean<StatViewServlet> statViewServlet() {
            return new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        }
    }

     

步骤 3:读取配置参数

在 application.yml 中配置 Druid 参数:

yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      stat-view-servlet:
        enabled: true  # 启用监控页面

 


3. 关键机制解析

机制说明
条件注解 @ConditionalOnClass 确保存在 Druid 类时才启用配置,避免冲突。
配置属性绑定 @EnableConfigurationProperties 将 application.yml 中的配置注入到 DruidStatProperties 对象。
覆盖默认数据源 通过 @AutoConfigureBefore(DataSourceAutoConfiguration.class) 优先创建 Druid 数据源,替代 Spring Boot 默认的 HikariCP。
监控 Servlet 注册 根据配置动态注册监控页面的 Servlet,提供 SQL 监控、URI 监控等功能。

4. 验证自动装配结果

检查 Bean 是否创建

@SpringBootTest
public class DruidAutoConfigTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void testDataSourceType() {
        assertThat(dataSource).isInstanceOf(DruidDataSource.class); // 确认数据源类型
    }
}

 

访问监控页面

启动应用后,访问 http://localhost:8080/druid/sql.html,输入配置的用户名密码,可查看 SQL 监控统计。


5. 常见问题排查

问题 1:数据源未切换为 Druid

  • 原因:未在配置中指定 type: com.alibaba.druid.pool.DruidDataSource

  • 解决:检查 application.yml 中的 spring.datasource.type 配置。

问题 2:监控页面无法访问

  • 原因:未启用 stat-view-servlet.enabled 或路径冲突。

  • 解决:确认配置并检查日志中的 Servlet 注册信息。

问题 3:依赖冲突

  • 现象NoClassDefFoundError 或 BeanCreationException

  • 解决:执行 mvn dependency:tree 排查冲突依赖,使用 <exclusions> 排除旧版本。


总结

  • 核心 JAR 包:提供 Druid 功能实现。

  • Starter 包:通过自动配置类、条件注解和属性绑定,实现零配置集成。

  • 结果:开发者只需添加依赖和配置参数,即可获得功能完备的 Druid 数据源及监控能力。

 

posted @ 2025-02-23 15:13  shaYang  阅读(96)  评论(0)    收藏  举报