多数源TOMCATJDBC POOL Config with Spring boot
prop
spring.datasource.db1.url=#Url
spring.datasource.db1.userName=#name
spring.datasource.db1.password=#password
spring.datasource.db1.driverClassName=#jdbcDriver
spring.datasource.db1.logAbandoned=true
spring.datasource.db1.removeAbandoned=true
#连接可以被删除的超时值(超过连接会被Abandoned)
spring.datasource.db1.removeAbandonedTimeout=600
spring.datasource.db1.suspectTimeout=600
#保持连接的最大毫秒数(超过强制重连)
spring.datasource.db1.maxAge=3000000
spring.datasource.db1.maxWait=3000000
spring.datasource.db1.maxActive=200
spring.datasource.db1.maxIdle=200
spring.datasource.db1.minIdle=5
spring.datasource.db1.initialSize=5
#used/MaxActive*100>=abandonWhenPercentageFull
spring.datasource.db1.abandonWhenPercentageFull=90
spring.datasource.db1.testWhileIdle=true
spring.datasource.db1.validationQuery=select 1
spring.datasource.db1.testOnBorrow=true
spring.datasource.db1.minEvictableIdleTimeMillis=400000
spring.datasource.db1.timeBetweenEvictionRunsMillis=200000
spring.datasource.db1.jdbcInterceptors=org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer
多数据源
DataSourcesConfig
@Configuration
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourcesConfig {
@Resource
Db1PoolProperties properties1;
@Resource
Db2PoolProperties properties2;
@Primary
@Bean(name = "db1DataSource")
@Qualifier("db1DataSource")
public DataSource csDataSource() {
DataSource d=new org.apache.tomcat.jdbc.pool.DataSource(properties1);
return d;
}
@Primary
@Bean(name = "db2DataSource")
@Qualifier("db2DataSource")
public DataSource csDataSource() {
DataSource d=new org.apache.tomcat.jdbc.pool.DataSource(properties2);
return d;
}
}
Db1PoolProperties
@Component
@ConfigurationProperties(prefix = "spring.datasource.db1")
public class Db1PoolProperties extends PoolProperties{
private static final long serialVersionUID = 1L;
}
Db2PoolProperties
@Component
@ConfigurationProperties(prefix = "spring.datasource.db2")
public class Db2PoolProperties extends PoolProperties{
private static final long serialVersionUID = 1L;
}
DB1Config
com.base.package.db1
– config
– entity
– dao
– service
---- impl
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "db1EntityManagerFactory",
transactionManagerRef = "db1TransactionManager",
basePackages = {"com.base.package.db1" })
public class CsDBConfig {
private final static String ENTITY_PACKAGE = "com.base.package.db1.entity";
@Autowired
@Qualifier("db1DataSource")
private DataSource db1DataSource;
@Bean(name = "db1EntityManager")
@Primary
public EntityManager toolkitEntityManager(EntityManagerFactoryBuilder builder) {
return toolkitEntityManagerFactory(builder).getObject().createEntityManager();
}
@Bean(name = "db1EntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean toolkitEntityManagerFactory(EntityManagerFactoryBuilder builder) {
HashMap<String, String> properties = new HashMap<>();
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServer2012Dialect");
LocalContainerEntityManagerFactoryBean factoryBean= builder.dataSource(db1DataSource).properties(getVendorProperties(db1DataSource))
.packages(ENTITY_PACKAGE).persistenceUnit("db1persistenceUnit").build();
factoryBean.setJpaPropertyMap(properties);
return factoryBean;
}
@Autowired
private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
@Bean(name = "db1TransactionManager")
@Primary
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(toolkitEntityManagerFactory(builder).getObject());
}
}
DB2Config
com.base.package.db2
– config
– entity
– dao
– service
---- impl
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "db2EntityManagerFactory",
transactionManagerRef = "db2TransactionManager",
basePackages = {"com.base.package.db2" })
public class CsDBConfig {
private final static String ENTITY_PACKAGE = "com.base.package.db2.entity";
@Autowired
@Qualifier("db2DataSource")
private DataSource db2DataSource;
@Bean(name = "db2EntityManager")
public EntityManager toolkitEntityManager(EntityManagerFactoryBuilder builder) {
return toolkitEntityManagerFactory(builder).getObject().createEntityManager();
}
@Bean(name = "db2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean toolkitEntityManagerFactory(EntityManagerFactoryBuilder builder) {
HashMap<String, String> properties = new HashMap<>();
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServer2012Dialect");
LocalContainerEntityManagerFactoryBean factoryBean= builder.dataSource(db2DataSource).properties(getVendorProperties(db2DataSource))
.packages(ENTITY_PACKAGE).persistenceUnit("db2persistenceUnit").build();
factoryBean.setJpaPropertyMap(properties);
return factoryBean;
}
@Autowired
private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
@Bean(name = "db2TransactionManager")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(toolkitEntityManagerFactory(builder).getObject());
}
}
参考
Tomcat-Jdbc-Pool连接池参数说明
https://blog.csdn.net/a4171175/article/details/78366552