springboot的Druid数据源使用
Druid数据源的介绍
java程序大部分都要访问数据库,为了提高数据库访问效率,不得不使用数据库连接池。
Druid是阿里巴巴开源平台上的一个数据库连接池实现,结合了C3P0,DBCP等数据库连接次的优点,同时还加入了日志监控功能。
Druid数据库连接池很好的监控池和sql的执行情况。
Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,我们来重点介绍 Spring Boot 如何集成 Druid 数据源,如何实现数据库监控。
-
引入Druid依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
-
配置文件
使用Druid数据源,首先要更改数据源类型,springboot默认的数据源类型是Hikari
spring: datasource: username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver #有些版本可能会有时区异常serverTimezone url: jdbc:mysql://localhost:3306/person?useUnicode=true&characterEncoding=utf-8 #更改数据源 type: com.alibaba.druid.pool.DruidDataSource #配置Druid数据源 druid: initialSize: 5 #初始化建立物理连接的个数 minIdle: 5 #最小连接池数量 maxActive: 20 #最大连接池数量 # 配置获取连接等待超时的时间(毫秒) maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置有一个连接在连接池中的最小生存时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙 filters: stat, wall, log4j # 通过connectProperties属性来打开mergeSql功能,慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-
导入log4j,使用日志
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>
-
为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性;
@Configuration public class druidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druidDataSource(){ return new DruidDataSource(); } @Bean //实现后台监控 public ServletRegistrationBean statViewServletRegistrationBean(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); Map<String,String> paramter=new HashMap<>(); //设置后台登录账号 registrationBean.addInitParameter("loginUsername", "wq"); registrationBean.addInitParameter("loginPassword","123"); //允许谁能访问 registrationBean.addInitParameter("allow", ""); //禁止谁能访问 registrationBean.addInitParameter("deny", "172.64.56.5"); return registrationBean; } public FilterRegistrationBean webStatFilterRegistrationBean(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); WebStatFilter filter = new WebStatFilter(); registrationBean.setFilter(filter); //对所有请求进行监控处理 registrationBean.addUrlPatterns("/*"); //排除名单,对他们不处理 registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return registrationBean; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧