Spring boot 集成 Druid 数据源过程详解
程序员文章站
2022-07-12 08:26:20
druid是阿里开源的一个jdbc应用组件,其中包括三部分:
druiddriver:代理driver,能够提供基于filter-chain模式的插件体系。...
druid是阿里开源的一个jdbc应用组件,其中包括三部分:
- druiddriver:代理driver,能够提供基于filter-chain模式的插件体系。
- druiddatasource:高效可管理的数据库连接池。
- sqlparser:实用sql语法分析
官方文档:
依赖
pom.xml
druid spring boot starter是阿里官方提供的spring boot插件,用于在spring boot项目中集成druid数据库连接池和监控
<!-- druid --> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid-spring-boot-starter</artifactid> <version>1.1.9</version> </dependency> <!-- log4j --> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>1.2.17</version> </dependency>
配置
application.yml
server: port: 8001 spring: datasource: name: druiddatasource type: com.alibaba.druid.pool.druiddatasource druid: driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://localhost:3306/coisini?useunicode=true&zerodatetimebehavior=converttonull&autoreconnect=true&characterencoding=utf-8&servertimezone=gmt%2b8 username: root password: sunday filters: stat,wall,log4j,config max-active: 100 initial-size: 1 max-wait: 60000 min-idle: 1 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: select 'x' test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true max-open-prepared-statements: 50 max-pool-prepared-statement-per-connection-size: 20
druiddatasourceproperties.class
配置类对druid进行自定义属性配置
@configurationproperties(prefix = "spring.datasource.druid") public class druiddatasourceproperties { // jdbc private string driverclassname; private string url; private string username; private string password; // jdbc connection pool private int initialsize; private int minidle; private int maxactive = 100; private long maxwait; private long timebetweenevictionrunsmillis; private long minevictableidletimemillis; private string validationquery; private boolean testwhileidle; private boolean testonborrow; private boolean testonreturn; private boolean poolpreparedstatements; private int maxpoolpreparedstatementperconnectionsize; // filter private string filters; 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 long getmaxwait() { return maxwait; } public void setmaxwait(long maxwait) { this.maxwait = maxwait; } public long gettimebetweenevictionrunsmillis() { return timebetweenevictionrunsmillis; } public void settimebetweenevictionrunsmillis(long timebetweenevictionrunsmillis) { this.timebetweenevictionrunsmillis = timebetweenevictionrunsmillis; } public long getminevictableidletimemillis() { return minevictableidletimemillis; } public void setminevictableidletimemillis(long 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 getdriverclassname() { return driverclassname; } public void setdriverclassname(string driverclassname) { this.driverclassname = driverclassname; } 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; } }
druid spring starter简化了很多配置,如果默认配置不满足你的需求,可以自定义配置,参考文档:
配置servlet和filter
druidconfig.class
@enableconfigurationproperties:用于导入druid的配置信息
@configuration @enableconfigurationproperties({druiddatasourceproperties.class}) public class druidconfig { @autowired private druiddatasourceproperties properties; @bean @conditionalonmissingbean public datasource druiddatasource() { druiddatasource druiddatasource = new druiddatasource(); druiddatasource.setdriverclassname(properties.getdriverclassname()); druiddatasource.seturl(properties.geturl()); druiddatasource.setusername(properties.getusername()); druiddatasource.setpassword(properties.getpassword()); druiddatasource.setinitialsize(properties.getinitialsize()); druiddatasource.setminidle(properties.getminidle()); druiddatasource.setmaxactive(properties.getmaxactive()); druiddatasource.setmaxwait(properties.getmaxwait()); druiddatasource.settimebetweenevictionrunsmillis(properties.gettimebetweenevictionrunsmillis()); druiddatasource.setminevictableidletimemillis(properties.getminevictableidletimemillis()); druiddatasource.setvalidationquery(properties.getvalidationquery()); druiddatasource.settestwhileidle(properties.istestwhileidle()); druiddatasource.settestonborrow(properties.istestonborrow()); druiddatasource.settestonreturn(properties.istestonreturn()); druiddatasource.setpoolpreparedstatements(properties.ispoolpreparedstatements()); druiddatasource.setmaxpoolpreparedstatementperconnectionsize(properties.getmaxpoolpreparedstatementperconnectionsize()); try { druiddatasource.setfilters(properties.getfilters()); druiddatasource.init(); } catch (sqlexception e) { e.printstacktrace(); } return druiddatasource; } /** * 注册servlet信息, 配置监控视图 * @return */ @bean @conditionalonmissingbean public servletregistrationbean<servlet> druidservlet() { servletregistrationbean<servlet> servletregistrationbean = new servletregistrationbean<servlet>(new statviewservlet(), "/druid/*"); //白名单: // servletregistrationbean.addinitparameter("allow","127.0.0.1,139.196.87.48"); //ip黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:sorry, you are not permitted to view this page. servletregistrationbean.addinitparameter("deny","192.168.1.119"); //登录查看信息的账号密码, 用于登录druid监控后台 servletregistrationbean.addinitparameter("loginusername", "admin"); servletregistrationbean.addinitparameter("loginpassword", "admin"); //是否能够重置数据. servletregistrationbean.addinitparameter("resetenable", "true"); return servletregistrationbean; } /** * 注册filter信息, 监控拦截器 * @return */ @bean @conditionalonmissingbean public filterregistrationbean<filter> filterregistrationbean() { filterregistrationbean<filter> filterregistrationbean = new filterregistrationbean<filter>(); filterregistrationbean.setfilter(new webstatfilter()); filterregistrationbean.addurlpatterns("/*"); filterregistrationbean.addinitparameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterregistrationbean; } }
resources目录下添加log4j参数配置文件
### set log levels ### log4j.rootlogger = info,debug, console, infofile, errorfile ,debugfile,mail locationinfo=true log4j.appender.console = org.apache.log4j.consoleappender log4j.appender.console.target = system.out log4j.appender.console.layout = org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern =[%d{yyyy-mm-dd hh:mm:ss,sss}]-[%p]:%m %x %n log4j.appender.infofile = org.apache.log4j.dailyrollingfileappender log4j.appender.infofile.threshold = info log4j.appender.infofile.file = c:/logs/log log4j.appender.infofile.datepattern = '.'yyyy-mm-dd'.log' log4j.appender.infofile.append=true log4j.appender.infofile.layout = org.apache.log4j.patternlayout log4j.appender.infofile.layout.conversionpattern =[%d{yyyy-mm-dd hh:mm:ss,sss}]-[%p]:%m %x %n log4j.appender.errorfile = org.apache.log4j.dailyrollingfileappender log4j.appender.errorfile.threshold = error log4j.appender.errorfile.file = c:/logs/error log4j.appender.errorfile.datepattern = '.'yyyy-mm-dd'.log' log4j.appender.errorfile.append=true log4j.appender.errorfile.layout = org.apache.log4j.patternlayout log4j.appender.errorfile.layout.conversionpattern =[%d{yyyy-mm-dd hh:mm:ss,sss}]-[%p]:%m %x %n log4j.appender.debugfile = org.apache.log4j.dailyrollingfileappender log4j.appender.debugfile.threshold = debug log4j.appender.debugfile.file = c:/logs/debug log4j.appender.debugfile.datepattern = '.'yyyy-mm-dd'.log' log4j.appender.debugfile.append=true log4j.appender.debugfile.layout = org.apache.log4j.patternlayout log4j.appender.debugfile.layout.conversionpattern =[%d{yyyy-mm-dd hh:mm:ss,sss}]-[%p]:%m %x %n
编译运行
启动应用,访问http://localhost:8001/druid/login.html,如下:
用户名与密码为driudconfig中配置的登录账号和密码:admin/admin
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: java中的接口能够被实例化吗
推荐阅读
-
spring boot2集成ES详解
-
Spring Boot设置支持跨域请求过程详解
-
spring-boot-2.0.3之quartz集成,数据源问题,源码探究
-
spring boot 集成Druid
-
Spring boot项目使用thymeleaf模板过程详解
-
Spring Boot 整合 Mybatis 实现 Druid 多数据源详解 springjavajdbc
-
Spring boot 集成 Druid 数据源过程详解
-
spring boot2.0.4集成druid,用jmeter并发测试工具调用接口,druid查看监控的结果
-
Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解
-
Spring Boot Async异步执行任务过程详解