Spring boot 集成 Druid 数据源过程详解

网友投稿 216 2022-12-29


Spring boot 集成 Druid 数据源过程详解

Druid是阿里开源的一个JDBC应用组件,其中包括三部分:

DruidDriver:代理Driver,能够提供基于Filter-Chain模式的插件体系。

DruidDataSource:高效可管理的数据库连接池。

SQLParser:实用SQL语法分析

官方文档:https://github.com/alibaba/druid/wiki

依赖

pom.xml

Druid Spring Boot Starter是阿里官方提供的Spring Boot插件,用于在Spring Boot项目中集成Druid数据库连接池和监控

com.alibaba

druid-spring-boot-starter

1.1.9

log4j

log4j

1.2.17

配置

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简化了很多配置,如果默认配置不满足你的需求,可以自定义配置,参考文档:

https://github.com/alibaba/druid/tree/master/druid-spring-boot-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 druidServlet() {

ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(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");

//是否能够重置数据.

servleVOeXDqtRegistrationBean.addInitParameter("resetEnable", "true");

return servletRegistrationBean;

}

/**

* 注册Filter信息, 监控拦截器

* @return

*/

@Bean

@ConditionalOnMissingBean

public FilterRegistrationBean filterRegistrationBean() {

FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:商用接口测试工具(商用接口测试工具有哪些)
下一篇:Java同步代码块解决银行取钱的安全问题实例分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~