<druid.version>1.0.26druid.version>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>${druid.version}version>
dependency>
#filter类名:stat,config,encoding,logging
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://115.159.152.139:3306/testblog
username: root
password: Cxq@123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 8 #初始化连接大小
min-idle: 5 #最小空闲连接数
max-active: 10 #最大连接数
query-timeout: 6000 #查询超时时间
transaction-query-timeout: 6000 #事务查询超时时间
remove-abandoned-timeout: 1800 #关闭空闲连接超时时间
filter-class-names: stat
filters: stat,config
DruidConfiguration.java
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;
@Configuration
@ConditionalOnClass({DruidDataSource.class})
@ConditionalOnProperty(
name = {"spring.datasource.type"},
havingValue = "com.alibaba.druid.pool.DruidDataSource",
matchIfMissing = true
)
@EnableConfigurationProperties(DruidDataSourceProperties.class)
public class DruidConfiguration {
@Bean
public DruidDataSource dataSource(DataSourceProperties dataSourceProperties, DruidDataSourceProperties druidDataSourceProperties) {
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;
}
}
DruidDataSourceProperties.java
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.Properties;
@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());
}
}
}
@SpringBootApplication
@ServletComponentScan
@ImportResource(locations = {"classpath:druid-bean.xml"})
public class BlogApiBootJpaDataApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApiBootJpaDataApplication.class, args);
}
}
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") })
public class DruidWebStatFilter extends WebStatFilter {
}
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
@WebServlet(urlPatterns = { "/druid/*" }, initParams = { @WebInitParam(name = "loginUsername", value = "ctoedu"), @WebInitParam(name = "loginPassword", value = "ctoedu") })
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = 1L;
}
@ImportResource(locations = { "classpath:druid-bean.xml" })
xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/>
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
<property name="patterns">
<list>
<value>com.cto.edu.blog.facade.*value>
list>
property>
bean>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
aop:config>
beans>