pom依赖
<!-- druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
application.yml文件
spring:
datasource:
druid:
primary:
driverClassName: oracle.jdbc.OracleDriver
jdbcUrl: jdbc:oracle:thin:@11.22.33.44:1568/cpdbs
username: 123456
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 10
maxActive: 500
minIdle: 0
maxWait: 60000
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 30
timeBetweenEvictionRunsMillis: 18800
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat
#使用非公平锁
useUnfairLock: true
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: false
validationQueryTimeout: 1
keepAlive: true
secondary:
jdbcUrl: jdbc:oracle:thin:@11.22.33.44:1568/cpdbs
username: 123456
password: 123456
tarim:
jdbcUrl: jdbc:oracle:thin:@11.22.33.44:1568/tlmdbs
username: 123456
password: 123456
主数据源配置
@Configuration
@MapperScan(basePackages = "com.pon.oms.mapper.primary", sqlSessionTemplateRef = "primarySqlSessionTemplate")
public class PrimaryConfig {
@Value("${spring.datasource.druid.primary.driverClassName}")
private String driverClass;
@Value("${spring.datasource.druid.primary.jdbcUrl}")
private String url;
@Value("${spring.datasource.druid.primary.username}")
private String username;
@Value("${spring.datasource.druid.primary.password}")
private String password;
@Value("${spring.datasource.druid.primary.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.primary.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.primary.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.primary.maxWait}")
private int maxWait;
@Value("${spring.datasource.druid.primary.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.druid.primary.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.druid.primary.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.primary.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.primary.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.druid.primary.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.primary.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.primary.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.druid.primary.filters}")
private String filters;
@Value("${spring.datasource.druid.primary.useUnfairLock}")
private boolean useUnfairLock;
@Value("${spring.datasource.druid.primary.removeAbandoned}")
private boolean removeAbandoned;
@Value("${spring.datasource.druid.primary.removeAbandonedTimeout}")
private int removeAbandonedTimeout;
@Value("${spring.datasource.druid.primary.logAbandoned}")
private boolean logAbandoned;
@Value("${spring.datasource.druid.primary.validationQueryTimeout}")
private int validationQueryTimeout;
@Value("${spring.datasource.druid.primary.keepAlive}")
private boolean keepAlive;
@Bean(name = "primary",initMethod = "init",destroyMethod = "close")
@Primary//标识主数据源注解
public DruidDataSource sentinelData() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDbType("oracle");
dataSource.setInitialSize(initialSize);
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setMaxWait(maxWait);
dataSource.setPoolPreparedStatements(poolPreparedStatements);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setUseUnfairLock(useUnfairLock);
dataSource.setRemoveAbandoned(removeAbandoned);
dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
dataSource.setLogAbandoned(logAbandoned);
dataSource.setValidationQueryTimeout(validationQueryTimeout);
dataSource.setKeepAlive(keepAlive);
try {
dataSource.setFilters(filters);
} catch (SQLException e) {
e.printStackTrace();
}
return dataSource;
}
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory sentinelSqlSessionFactory(@Qualifier("primary") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:sqlmap/primary/*.xml"));
return bean.getObject();
}
@Bean(name = "primaryTransactionManager")
@Primary
public DataSourceTransactionManager sentinelTransactionManager(@Qualifier("primary") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "primarySqlSessionTemplate")
@Primary
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
/**
* 注册一个StatViewServlet
* @return
*/
@Bean
public ServletRegistrationBean<StatViewServlet> DruidStatViewServle() {
// org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>
(new StatViewServlet(), "/druid/*");
// 添加初始化参数:initParams
// 白名单:
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 登录查看信息的账号密码
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
// 是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
从数据源配置
@Configuration
@MapperScan(basePackages = "com.pon.oms.mapper.secondary", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryConfig {
@Value("${spring.datasource.druid.primary.driverClassName}")
private String driverClass;
@Value("${spring.datasource.druid.secondary.jdbcUrl}")
private String url;
@Value("${spring.datasource.druid.secondary.username}")
private String username;
@Value("${spring.datasource.druid.secondary.password}")
private String password;
@Value("${spring.datasource.druid.primary.initialSize}")
private int initialSize;
@Value("${spring.datasource.druid.primary.maxActive}")
private int maxActive;
@Value("${spring.datasource.druid.primary.minIdle}")
private int minIdle;
@Value("${spring.datasource.druid.primary.maxWait}")
private int maxWait;
@Value("${spring.datasource.druid.primary.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.druid.primary.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.druid.primary.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.primary.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.primary.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.druid.primary.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.primary.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.primary.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.druid.primary.filters}")
private String filters;
@Value("${spring.datasource.druid.primary.useUnfairLock}")
private boolean useUnfairLock;
@Value("${spring.datasource.druid.primary.removeAbandoned}")
private boolean removeAbandoned;
@Value("${spring.datasource.druid.primary.removeAbandonedTimeout}")
private int removeAbandonedTimeout;
@Value("${spring.datasource.druid.primary.logAbandoned}")
private boolean logAbandoned;
@Value("${spring.datasource.druid.primary.validationQueryTimeout}")
private int validationQueryTimeout;
@Value("${spring.datasource.druid.primary.keepAlive}")
private boolean keepAlive;
@Bean(name = "secondary",initMethod = "init",destroyMethod = "close")
public DruidDataSource outData() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDbType("oracle");
dataSource.setInitialSize(initialSize);
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setMaxWait(maxWait);
dataSource.setPoolPreparedStatements(poolPreparedStatements);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setUseUnfairLock(useUnfairLock);
dataSource.setRemoveAbandoned(removeAbandoned);
dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
dataSource.setLogAbandoned(logAbandoned);
dataSource.setValidationQueryTimeout(validationQueryTimeout);
dataSource.setKeepAlive(keepAlive);
try {
dataSource.setFilters(filters);
} catch (SQLException e) {
e.printStackTrace();
}
return dataSource;
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory outerSqlSessionFactory(@Qualifier("secondary") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:sqlmap/secondary/*.xml"));
return bean.getObject();
}
@Bean(name = "secondaryTransactionManager")
public DataSourceTransactionManager outerTransactionManager(@Qualifier("secondary") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "secondarySqlSessionTemplate")
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}