package com.rongwei.zhsw.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.alibaba.druid.wall.WallConfig; import com.alibaba.druid.wall.WallFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import java.sql.SQLException; @Configuration public class zhswDataSourceConfig { @Value("${spring.datasource.druid.url}") private String dbUrl; @Value("${spring.datasource.druid.username}") private String username; @Value("${spring.datasource.druid.password}") private String password; @Value("${spring.datasource.druid.driver-class-name}") private String driverClassName; @Autowired private Environment evn; /** * 创建数据源对象 * @return data source */ private DruidDataSource createDefaultDataSource() throws SQLException { //如果不指定数据库类型,则使用默认数据库连接 DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); dataSource.setName("defaultDatasource"); dataSource.setUrl(dbUrl+"&allowMultiQueries=true"); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); dataSource.setResetStatEnable(true); /*try { dataSource.setFilters("stat,wall"); } catch (SQLException e) { e.printStackTrace(); }*/ dataSource.setInitialSize(8); dataSource.setMaxActive(100); dataSource.setMaxWait(7000); dataSource.setTimeBetweenEvictionRunsMillis(60000); dataSource.setMinEvictableIdleTimeMillis(300000); dataSource.setRemoveAbandoned(true); dataSource.setRemoveAbandonedTimeout(300); dataSource.setLogAbandoned(true); // 连接最大存活时间,默认是-1(不限制物理连接时间),从创建连接开始计算,如果超过该时间,则会被清理 // dataSource.setPhyTimeoutMillis(15000); dataSource.setValidationQuery("select 1"); dataSource.setTestWhileIdle(true); dataSource.setTestOnBorrow(false); dataSource.setTestOnReturn(false); dataSource.setPoolPreparedStatements(false); dataSource.setMaxOpenPreparedStatements(20); // 开启多条SQL语句批量执行 WallConfig wallConfig = new WallConfig(); wallConfig.setMultiStatementAllow(true); WallFilter wallFilter = new WallFilter(); wallFilter.setConfig(wallConfig); /*List filters = new ArrayList<>(); filters.add(wallFilter); dataSource.setProxyFilters(filters);*/ dataSource.getProxyFilters().add(wallFilter); dataSource.setFilters("stat,wall");//配置文件中的配置失效必须手动设置 return dataSource; } /*@Bean @Primary public DynamicDataSource dataSource() throws SQLException { DynamicDataSource dynamicDataSource = new DynamicDataSource(); DruidDataSource defaultDataSource = createDefaultDataSource(); DynamicDataSource.dataSourcesMap.put("defaultDataSource", defaultDataSource); dynamicDataSource.setTargetDataSources(DynamicDataSource.dataSourcesMap); return dynamicDataSource; }*/ // @Primary @Bean public DruidDataSource dataSourceOne() throws SQLException{ return createDefaultDataSource(); } }