SpringBoot整合Druid数据连接池
程序员文章站
2022-04-24 12:39:42
SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池。Druid能够提供强大的监控和扩展功能。 在哪里下载druid maven*仓库: 怎么获取Druid的源码 Druid是一个开源项目,源码托管在github上,源代码仓库地址是 。同 ......
springboot整合druid数据连接池
druid是什么?
druid是alibaba开源的的数据库连接池。druid能够提供强大的监控和扩展功能。
在哪里下载druid
maven*仓库:
怎么获取druid的源码
druid是一个开源项目,源码托管在github上,源代码仓库地址是 。同时每次druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码
怎么配置maven
<dependency> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> <!-- 可通过*仓库获取最新的版本号,这里用我项目中的版本号 --> <version>1.0.11</version> </dependency>
开始配置
- 首先是 application.properties
# 数据库配置 spring.datasource.driver-class-name=com.mysql.jdbc.driver # 注:此处必须用 druid 的数据源 spring.datasource.type=com.alibaba.druid.pool.druiddatasource spring.datasource.name=test spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.initialsize=5 spring.datasource.minidle=5 spring.datasource.maxactive=10 spring.datasource.maxwait=60000 spring.datasource.timebetweenevictionrunsmillis=3600000 spring.datasource.minevictableidletimemillis=3600000 spring.datasource.validationquery=select 'x' spring.datasource.testwhileidle=true spring.datasource.testonborrow=true spring.datasource.testonreturn=false spring.datasource.poolpreparedstatements=true spring.datasource.maxpoolpreparedstatementperconnectionsize=20 spring.datasource.filters=stat,wall,slf4j spring.datasource.connectionproperties=druid.stat.mergesql=true;druid.stat.slowsqlmillis=5000 spring.datasource.useglobaldatasourcestat=true # druid 登录信息 druid.config.user-name=root druid.config.password=root druid.config.url-mapping=/druid/*
- 封装数据库配置到 java bean
@configuration @configurationproperties(prefix = "spring.datasource") public class dbproperties { private string url; private string username; private string password; private string driverclassname; private int initialsize; private int minidle; private int maxactive; private int maxwait; private int timebetweenevictionrunsmillis; private int minevictableidletimemillis; private string validationquery; private boolean testwhileidle; private boolean testonborrow; private boolean testonreturn; private boolean poolpreparedstatements; private int maxpoolpreparedstatementperconnectionsize; private string filters; private string connectionproperties; private boolean useglobaldatasourcestat; public string geturl() { return url; } public void seturl(string url) { this.url = url; } public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } public string getdriverclassname() { return driverclassname; } public void setdriverclassname(string driverclassname) { this.driverclassname = driverclassname; } public int getinitialsize() { return initialsize; } public void setinitialsize(int initialsize) { this.initialsize = initialsize; } public int getminidle() { return minidle; } public void setminidle(int minidle) { this.minidle = minidle; } public int getmaxactive() { return maxactive; } public void setmaxactive(int maxactive) { this.maxactive = maxactive; } public int getmaxwait() { return maxwait; } public void setmaxwait(int maxwait) { this.maxwait = maxwait; } public int gettimebetweenevictionrunsmillis() { return timebetweenevictionrunsmillis; } public void settimebetweenevictionrunsmillis(int timebetweenevictionrunsmillis) { this.timebetweenevictionrunsmillis = timebetweenevictionrunsmillis; } public int getminevictableidletimemillis() { return minevictableidletimemillis; } public void setminevictableidletimemillis(int minevictableidletimemillis) { this.minevictableidletimemillis = minevictableidletimemillis; } public string getvalidationquery() { return validationquery; } public void setvalidationquery(string validationquery) { this.validationquery = validationquery; } public boolean istestwhileidle() { return testwhileidle; } public void settestwhileidle(boolean testwhileidle) { this.testwhileidle = testwhileidle; } public boolean istestonborrow() { return testonborrow; } public void settestonborrow(boolean testonborrow) { this.testonborrow = testonborrow; } public boolean istestonreturn() { return testonreturn; } public void settestonreturn(boolean testonreturn) { this.testonreturn = testonreturn; } public boolean ispoolpreparedstatements() { return poolpreparedstatements; } public void setpoolpreparedstatements(boolean poolpreparedstatements) { this.poolpreparedstatements = poolpreparedstatements; } public int getmaxpoolpreparedstatementperconnectionsize() { return maxpoolpreparedstatementperconnectionsize; } public void setmaxpoolpreparedstatementperconnectionsize(int maxpoolpreparedstatementperconnectionsize) { this.maxpoolpreparedstatementperconnectionsize = maxpoolpreparedstatementperconnectionsize; } public string getfilters() { return filters; } public void setfilters(string filters) { this.filters = filters; } public string getconnectionproperties() { return connectionproperties; } public void setconnectionproperties(string connectionproperties) { this.connectionproperties = connectionproperties; } public boolean isuseglobaldatasourcestat() { return useglobaldatasourcestat; } public void setuseglobaldatasourcestat(boolean useglobaldatasourcestat) { this.useglobaldatasourcestat = useglobaldatasourcestat; } }
@configuration @configurationproperties(prefix = "druid.config") public class druidproperties { private string username; private string password; private string urlmapping; public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } public string geturlmapping() { return urlmapping; } public void seturlmapping(string urlmapping) { this.urlmapping = urlmapping; } }
- 配置数据源
/** * 持久层相关配置 */ @configuration public class sessionfactoryconfig { private static final logger logger = loggerfactory.getlogger(sessionfactoryconfig.class); private final dbproperties db; @autowired public sessionfactoryconfig(dbproperties db) { this.db = db; } /** * 创建数据源 */ @bean // 如果访问 druid 时数据源页面显示 (*) property for user to setup 可用下面的 bean 注入方式 // @bean(destroymethod = "close", initmethod = "init") @primary public datasource datasource() { final druiddatasource datasource = new druiddatasource(); datasource.seturl(db.geturl()); datasource.setusername(db.getusername()); datasource.setpassword(db.getpassword()); datasource.setdriverclassname(db.getdriverclassname()); datasource.setinitialsize(db.getinitialsize()); datasource.setminidle(db.getminidle()); datasource.setmaxactive(db.getmaxactive()); datasource.setmaxwait(db.getmaxwait()); datasource.settimebetweenevictionrunsmillis(db.gettimebetweenevictionrunsmillis()); datasource.setminevictableidletimemillis(db.getminevictableidletimemillis()); datasource.setvalidationquery(db.getvalidationquery()); datasource.settestonreturn(db.istestonreturn()); datasource.setpoolpreparedstatements(db.ispoolpreparedstatements()); datasource.setmaxpoolpreparedstatementperconnectionsize(db.getmaxpoolpreparedstatementperconnectionsize()); datasource.setuseglobaldatasourcestat(db.isuseglobaldatasourcestat()); try { datasource.setfilters(db.getfilters()); } catch (sqlexception e) { logger.info("druid configuration initialization filter: " + e); } datasource.setconnectionproperties(db.getconnectionproperties()); return datasource; } }
- druid连接池配置
/** * druid连接池配置 */ @configuration public class druidconfiguration { private static final logger logger = loggerfactory.getlogger(druidconfiguration.class); private final druidproperties druidproperties; @autowired public druidconfiguration(druidproperties dp) { this.druidproperties = dp; } /** * 访问路径及用户名、密码 */ @bean public servletregistrationbean druidconfig() { logger.info("init druid servlet configuration "); final servletregistrationbean srb = new servletregistrationbean(); srb.setservlet(new statviewservlet()); logger.info("druid config info --> {}", druidproperties); srb.addurlmappings(druidproperties.geturlmapping()); srb.addinitparameter("loginusername", druidproperties.getusername()); srb.addinitparameter("loginpassword", druidproperties.getpassword()); return srb; } /** * 配置过滤器 */ @bean public filterregistrationbean filterregistrationbean() { final filterregistrationbean filterregistrationbean = new filterregistrationbean(); filterregistrationbean.setfilter(new webstatfilter()); filterregistrationbean.addurlpatterns("/*"); filterregistrationbean.addinitparameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterregistrationbean; } }
- 委托druid进行spring 监控
/** * 委托druid进行spring 监控 */ @configuration public class springmonitoringconfig { @bean(name = "druid-stat-interceptor") public druidstatinterceptor druidstatinterceptor() { return new druidstatinterceptor(); } @bean(name = "druid-stat-pointcut") // 非单例 @scope("prototype") public jdkregexpmethodpointcut druidstatpointcut() { final jdkregexpmethodpointcut pointcut = new jdkregexpmethodpointcut(); pointcut.setpatterns("com.ajm.punch_the_clock.controller.*", "com.ajm.punch_the_clock.mapper.*"); return pointcut; } @bean public defaultpointcutadvisor druidstatadvisor(@qualifier("druid-stat-interceptor") final druidstatinterceptor druidstatinterceptor, @qualifier("druid-stat-pointcut") final jdkregexpmethodpointcut druidstatpointcut) { final defaultpointcutadvisor defaultpointadvisor = new defaultpointcutadvisor(); defaultpointadvisor.setpointcut(druidstatpointcut); defaultpointadvisor.setadvice(druidstatinterceptor); return defaultpointadvisor; } }
- 项目启动,访问 http://127.0.0.1:端口号/druid
如果出现以上页面,恭喜你。整合 ok :-)
上一篇: 11.命令行提示符的实现
推荐阅读
-
springboot windows10风格 activiti 整合项目框架源码 shiro 安全框架 druid
-
Springboot+mybatis+druid 配置多数据源
-
SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法
-
SpringBoot配置Druid数据监控代码实例
-
springboot activiti 整合项目框架源码 druid 数据库连接池 shiro 安全框架
-
荐 Java——数据库编程JDBC之数据库连接池技术(C3P0与Druid,提供了Druid的工具类)
-
关于数据库连接池Druid使用说明
-
Springboot整合druid
-
SpringBoot整合JPA数据源方法及配置解析
-
springboot整合高版本druid数据源(1.1.20+),解决监控页打不开的问题