SpringBoot-数据访问之Druid

Druid数据源

  1. 官方地址
  1. 导入依赖
  • Spring Boot 2.5.2版本导入下面的druid 1.1.17依赖并不能使用监控功能
  • 使用相同版本的druid-spring-boot-starter可以使用监控功能。
XML 复制代码
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.17</version>
</dependency>
  1. XML方式配置数据源
XML 复制代码
<bean id="dataSource" 
		class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
	<property name="maxActive" value="20" />
	<property name="initialSize" value="1" />
	<property name="maxWait" value="60000" />
	<property name="minIdle" value="1" />
	<property name="timeBetweenEvictionRunsMillis" value="60000" />
	<property name="minEvictableIdleTimeMillis" value="300000" />
	<property name="testWhileIdle" value="true" />
	<property name="testOnBorrow" value="false" />
	<property name="testOnReturn" value="false" />
	<property name="poolPreparedStatements" value="true" />
	<property name="maxOpenPreparedStatements" value="20" />
</bean>
  1. 配置类方式配置数据源
java 复制代码
//默认的自动配置是判断容器中没有才会配@ConditionalOnMissingBean(DataSource.class)
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
	DruidDataSource druidDataSource = new DruidDataSource();

    //要么ConfigurationProperties配置文件配置,要么手动set
	//druidDataSource.setUrl();
	//druidDataSource.setUsername();
	//druidDataSource.setPassword();

    //wall是加入监控防火墙
    //stat是加入监控统计功能
    //多个值用","分割
	druidDataSource.setFilters("stat,wall");
	druidDataSource.setMaxActive(10);
	return druidDataSource;
}
  1. StatViewServlet的用途
  • 内置监控页面的首页是**/druid/index.html**
  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API
java 复制代码
//配置 druid的监控页功能
@Bean
public ServletRegistrationBean statViewServlet(){
	StatViewServlet statViewServlet = new StatViewServlet();
	ServletRegistrationBean<StatViewServlet> registrationBean =
			new ServletRegistrationBean<>(statViewServlet, "/druid/*");

    //监控页登录用户
	registrationBean.addInitParameter("loginUsername","admin");
	registrationBean.addInitParameter("loginPassword","123456");
	return registrationBean;
}
  1. StatFilter
  • 用于统计监控信息;如SQL监控、URI监控
  • 系统中所有filter

|---------------|---------------------------------------------------------|
| 别名 | Filter类名 |
| default | com.alibaba.druid.filter.stat.StatFilter |
| stat | com.alibaba.druid.filter.stat.StatFilter |
| mergeStat | com.alibaba.druid.filter.stat.MergeStatFilter |
| encoding | com.alibaba.druid.filter.encoding.EncodingConvertFilter |
| log4j | com.alibaba.druid.filter.logging.Log4jFilter |
| log4j2 | com.alibaba.druid.filter.logging.Log4j2Filter |
| slf4j | com.alibaba.druid.filter.logging.Slf4jLogFilter |
| commonlogging | com.alibaba.druid.filter.logging.CommonsLogFilter |

java 复制代码
//WebStatFilter 用于采集web-jdbc关联监控的数据。
@Bean
public FilterRegistrationBean webStatFilter(){
	WebStatFilter webStatFilter = new WebStatFilter();

	FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
			new FilterRegistrationBean<>(webStatFilter);
	//过滤所有
	filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
	//排除过滤的路径
	filterRegistrationBean.addInitParameter(
			"exclusions",
			"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

	return filterRegistrationBean;
}

Druid-starter自动配置原理

  1. 引入starter依赖
XML 复制代码
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.17</version>
</dependency>
  1. DruidDataSourceAutoConfigure
  • 配置文件配置 spring.datasource.druidspring.datasource
  • 需要配置在springboot官方数据源之前,也就是在spring-boot-starter-data-jdbc之前引入依赖
  1. DruidSpringAopConfiguration.class
  • 监控SpringBean的
  • 配置项:spring.datasource.druid.aop-patterns
  1. DruidStatViewServletConfiguration.class
  • 监控页的配置:spring.datasource.druid.stat-view-servlet;默认开启
  1. DruidWebStatFilterConfiguration.class
  • web监控配置;spring.datasource.druid.web-stat-filter;默认开启
  1. DruidFilterConfiguration.class
  • 所有Druid自己filter的配置
  1. 配置文件示例
bash 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    druid:
      aop-patterns: com.my.admin.*  #监控SpringBean
      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)

      stat-view-servlet:   # 配置监控页功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 监控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 对上面filters里面的stat的详细配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false
相关推荐
猫头虎3 小时前
解决升级IDEA2025.2后,每次打开Maven项目爆红的问题:Windows和Mac解决方案
java·ide·macos·maven·intellij-idea·idea·intellij idea
NFG89C3 小时前
Adobe Lightroom Classic 2025解锁版 (专业照片管理)
java·adobe·工具
蒙奇D索大3 小时前
【计算机网络】408计算机网络高分指南:物理层编码与调制技术精讲
java·前端·学习·计算机网络
豐儀麟阁贵3 小时前
5.2 类
java·开发语言
九皇叔叔3 小时前
Java循环结构全解析:从基础用法到性能优化(含经典案例)
java·开发语言·python
漫漫不慢.4 小时前
蓝桥杯-16955 岁月流转
java·jvm·蓝桥杯
JanelSirry4 小时前
如何查看java死锁?具体怎么做,怎么避免
java·开发语言
yinghuaqipao4 小时前
面向对象——设计模式(创建型)
android·java·设计模式
Jing_jing_X4 小时前
Spring 自动注入是怎么实现的?从 @Component 到 @Autowired 的完整流程
java·后端·spring