上次介绍过一次Druid,不清楚可以查看:Spring Boot使用Druid和监控配置
编写类:DruidDataSourceProperties.java
package org.paascloud.ops.config; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Properties; /** * Created by meyer on 2017/1/15. */ @ConfigurationProperties("spring.datasource.druid") public class DruidDataSourceProperties { private Boolean testWhileIdle = true; private Boolean testOnBorrow; private String validationQuery = "SELECT 1"; private Boolean useGlobalDataSourceStat; private String filters; private Long timeBetweenLogStatsMillis; private Integer maxSize; private Boolean clearFiltersEnable; private Boolean resetStatEnable; private Integer notFullTimeoutRetryCount; private Integer maxWaitThreadCount; private Boolean failFast; private Boolean phyTimeoutMillis; private Long minEvictableIdleTimeMillis = 300000L; private Long maxEvictableIdleTimeMillis; private Integer initialSize = 5; private Integer minIdle = 5; private Integer maxActive = 20; private Long maxWait = 60000L; private Long timeBetweenEvictionRunsMillis = 60000L; private Boolean poolPreparedStatements = true; private Integer maxPoolPreparedStatementPerConnectionSize = 20; private Properties connectionProperties = new Properties() {{ put("druid.stat.mergeSql", "true"); put("druid.stat.slowSqlMillis", "5000"); }}; public Boolean getTestWhileIdle() { return testWhileIdle; } public void setTestWhileIdle(Boolean testWhileIdle) { this.testWhileIdle = testWhileIdle; } public Boolean getTestOnBorrow() { return testOnBorrow; } public void setTestOnBorrow(Boolean testOnBorrow) { this.testOnBorrow = testOnBorrow; } public String getValidationQuery() { return validationQuery; } public void setValidationQuery(String validationQuery) { this.validationQuery = validationQuery; } public Boolean getUseGlobalDataSourceStat() { return useGlobalDataSourceStat; } public void setUseGlobalDataSourceStat(Boolean useGlobalDataSourceStat) { this.useGlobalDataSourceStat = useGlobalDataSourceStat; } public String getFilters() { return filters; } public void setFilters(String filters) { this.filters = filters; } public Long getTimeBetweenLogStatsMillis() { return timeBetweenLogStatsMillis; } public void setTimeBetweenLogStatsMillis(Long timeBetweenLogStatsMillis) { this.timeBetweenLogStatsMillis = timeBetweenLogStatsMillis; } public Integer getMaxSize() { return maxSize; } public void setMaxSize(Integer maxSize) { this.maxSize = maxSize; } public Boolean getClearFiltersEnable() { return clearFiltersEnable; } public void setClearFiltersEnable(Boolean clearFiltersEnable) { this.clearFiltersEnable = clearFiltersEnable; } public Boolean getResetStatEnable() { return resetStatEnable; } public void setResetStatEnable(Boolean resetStatEnable) { this.resetStatEnable = resetStatEnable; } public Integer getNotFullTimeoutRetryCount() { return notFullTimeoutRetryCount; } public void setNotFullTimeoutRetryCount(Integer notFullTimeoutRetryCount) { this.notFullTimeoutRetryCount = notFullTimeoutRetryCount; } public Integer getMaxWaitThreadCount() { return maxWaitThreadCount; } public void setMaxWaitThreadCount(Integer maxWaitThreadCount) { this.maxWaitThreadCount = maxWaitThreadCount; } public Boolean getFailFast() { return failFast; } public void setFailFast(Boolean failFast) { this.failFast = failFast; } public Boolean getPhyTimeoutMillis() { return phyTimeoutMillis; } public void setPhyTimeoutMillis(Boolean phyTimeoutMillis) { this.phyTimeoutMillis = phyTimeoutMillis; } public Long getMinEvictableIdleTimeMillis() { return minEvictableIdleTimeMillis; } public void setMinEvictableIdleTimeMillis(Long minEvictableIdleTimeMillis) { this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; } public Long getMaxEvictableIdleTimeMillis() { return maxEvictableIdleTimeMillis; } public void setMaxEvictableIdleTimeMillis(Long maxEvictableIdleTimeMillis) { this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis; } public Integer getInitialSize() { return initialSize; } public void setInitialSize(Integer initialSize) { this.initialSize = initialSize; } public Integer getMinIdle() { return minIdle; } public void setMinIdle(Integer minIdle) { this.minIdle = minIdle; } public Integer getMaxActive() { return maxActive; } public void setMaxActive(Integer 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 Boolean getPoolPreparedStatements() { return poolPreparedStatements; } public void setPoolPreparedStatements(Boolean poolPreparedStatements) { this.poolPreparedStatements = poolPreparedStatements; } public Integer getMaxPoolPreparedStatementPerConnectionSize() { return maxPoolPreparedStatementPerConnectionSize; } public void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) { this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize; } public Properties getConnectionProperties() { return connectionProperties; } public void setConnectionProperties(Properties connectionProperties) { this.connectionProperties = connectionProperties; } public Properties toProperties() { Properties properties = new Properties(); notNullAdd(properties, "testWhileIdle", this.testWhileIdle); notNullAdd(properties, "testOnBorrow", this.testOnBorrow); notNullAdd(properties, "validationQuery", this.validationQuery); notNullAdd(properties, "useGlobalDataSourceStat", this.useGlobalDataSourceStat); notNullAdd(properties, "filters", this.filters); notNullAdd(properties, "timeBetweenLogStatsMillis", this.timeBetweenLogStatsMillis); notNullAdd(properties, "stat.sql.MaxSize", this.maxSize); notNullAdd(properties, "clearFiltersEnable", this.clearFiltersEnable); notNullAdd(properties, "resetStatEnable", this.resetStatEnable); notNullAdd(properties, "notFullTimeoutRetryCount", this.notFullTimeoutRetryCount); notNullAdd(properties, "maxWaitThreadCount", this.maxWaitThreadCount); notNullAdd(properties, "failFast", this.failFast); notNullAdd(properties, "phyTimeoutMillis", this.phyTimeoutMillis); notNullAdd(properties, "minEvictableIdleTimeMillis", this.minEvictableIdleTimeMillis); notNullAdd(properties, "maxEvictableIdleTimeMillis", this.maxEvictableIdleTimeMillis); notNullAdd(properties, "initialSize", this.initialSize); notNullAdd(properties, "minIdle", this.minIdle); notNullAdd(properties, "maxActive", this.maxActive); notNullAdd(properties, "maxWait", this.maxWait); notNullAdd(properties, "timeBetweenEvictionRunsMillis", this.timeBetweenEvictionRunsMillis); notNullAdd(properties, "poolPreparedStatements", this.poolPreparedStatements); notNullAdd(properties, "maxPoolPreparedStatementPerConnectionSize", this.maxPoolPreparedStatementPerConnectionSize); return properties; } private void notNullAdd(Properties properties, String key, Object value) { if (value != null) { properties.setProperty("druid." + key, value.toString()); } } }
编写Spring Boot自动配置类:DruidDataSourceconfig.java
package org.paascloud.ops.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Created by meyer on 2017/1/15. */ @Configuration @ConditionalOnClass({DruidDataSource.class}) @ConditionalOnProperty( name = {"spring.datasource.type"}, havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true ) @EnableConfigurationProperties(DruidDataSourceProperties.class) public class DruidDataSourceConfig { @Bean public DruidDataSource dataSource(DataSourceProperties dataSourceProperties, DruidDataSourceProperties druidDataSourceProperties) { DruidDataSource druidDataSource = (DruidDataSource) dataSourceProperties.initializeDataSourceBuilder().type(DruidDataSource.class).build(); druidDataSource.configFromPropety(druidDataSourceProperties.toProperties()); druidDataSource.setInitialSize(druidDataSourceProperties.getInitialSize()); druidDataSource.setMinIdle(druidDataSourceProperties.getMinIdle()); druidDataSource.setMaxActive(druidDataSourceProperties.getMaxActive()); druidDataSource.setMaxWait(druidDataSourceProperties.getMaxWait()); druidDataSource.setConnectProperties(druidDataSourceProperties.getConnectionProperties()); return druidDataSource; } @Bean public ServletRegistrationBean druidStatViewServlet(DruidDataSourceProperties druidDataSourceProperties) { if (StringUtils.isEmpty(druidDataSourceProperties.getServletPath())) { druidDataSourceProperties.setServletPath("/druid/*"); } return new ServletRegistrationBean(new StatViewServlet(), druidDataSourceProperties.getServletPath()); } @Bean public FilterRegistrationBean druidWebStatFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*"); return filterRegistrationBean; } }
触发Druid配置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://xxxxx:3306/xxxxxx spring.datasource.username=xxxxxxxx spring.datasource.password=xxxxxxxxxxxx
后续介绍Druid怎么配合spring-boot-starter-actuator来获取监控数据.
转载请注明:晓窗博客 » Spring Boot使用Druid和监控配置(修订版)