废话不多说 直接上配置代码
import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
public class DruidDBConfig {
private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
//@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
//private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.filters}")
private String filters;
@Value("${spring.datasource.connectionProperties}")
private String connectionProperties;
@Value("${spring.datasource.removeAbandoned}")
private boolean removeAbandoned;
@Value("${spring.datasource.removeAbandonedTimeout}")
private int removeAbandonedTimeout;
// @Value("${spring.datasource.connectionInitSqls}")
// private String connectionInitSqls;
@Value("${spring.datasource.keepAlive}")
private boolean keepAlive;
@Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource(){
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
//configuration
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
//datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
datasource.setRemoveAbandoned(removeAbandoned);
datasource.setRemoveAbandonedTimeout(removeAbandonedTimeout); //秒
datasource.setKeepAlive(keepAlive);
//Collection<Object> collection=new ArrayList<Object>();
//collection.add(connectionInitSqls);
//datasource.setConnectionInitSqls(collection);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
datasource.setConnectionProperties(connectionProperties);
return datasource;
}
@Value("${spring.datasource.secondary.url}")
private String pgdbUrl;
@Value("${spring.datasource.secondary.username}")
private String pgusername;
@Value("${spring.datasource.secondary.password}")
private String pgpassword;
@Value("${spring.datasource.secondary.driver-class-name}")
private String pgdriverClassName;
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() {
DruidDataSource datasource2 = new DruidDataSource();
datasource2.setUrl(this.pgdbUrl);
datasource2.setUsername(pgusername);
datasource2.setPassword(pgpassword);
datasource2.setDriverClassName(pgdriverClassName);
//configuration
datasource2.setInitialSize(initialSize);
datasource2.setMinIdle(minIdle);
datasource2.setMaxActive(maxActive);
datasource2.setMaxWait(maxWait);
datasource2.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource2.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource2.setValidationQuery(validationQuery);
datasource2.setTestWhileIdle(testWhileIdle);
datasource2.setTestOnBorrow(testOnBorrow);
datasource2.setTestOnReturn(testOnReturn);
datasource2.setPoolPreparedStatements(poolPreparedStatements);
//datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
datasource2.setRemoveAbandoned(removeAbandoned);
datasource2.setRemoveAbandonedTimeout(removeAbandonedTimeout); //秒
datasource2.setKeepAlive(keepAlive);
//Collection<Object> collection=new ArrayList<Object>();
//collection.add(connectionInitSqls);
//datasource.setConnectionInitSqls(collection);
try {
datasource2.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
datasource2.setConnectionProperties(connectionProperties);
return datasource2;
}
//这个第二个数据源,每次使用需要注入secondaryJdbcTemplate 就可以使用了
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate() {
return new JdbcTemplate(secondaryDataSource());
}
}