Java 在spring boot中使用application.yml配置两个不同的HIKAridataSource时,一个数据源的连接关闭错误
启动应用程序时,它会显示错误: 提取数据库名称时出错-返回空错误代码 org.springframework.jdbc.support.MetaDataAccessException: 提取数据库元数据时出错;嵌套异常为com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许进行任何操作 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许进行任何操作Java 在spring boot中使用application.yml配置两个不同的HIKAridataSource时,一个数据源的连接关闭错误,java,spring,spring-boot,hikaricp,Java,Spring,Spring Boot,Hikaricp,启动应用程序时,它会显示错误: 提取数据库名称时出错-返回空错误代码 org.springframework.jdbc.support.MetaDataAccessException: 提取数据库元数据时出错;嵌套异常为com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许进行任何操作 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConn
I have following configuration in my yml file:
datasource:
db1:
type: com.zaxxer.hikari.HikariDataSource
url: ${URL}?useUnicode=true&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: ${USER}
password: ${PSSWD}
driverClassName: com.mysql.jdbc.Driver
hikari:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
poolName: pool1
idleTimeout: 30000
connectionTimeout: 30000
minimumIdle: 5
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
database: MYSQL
show-sql: true
properties:
hibernate.id.new_generator_mappings: true
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
db2:
type: com.zaxxer.hikari.HikariDataSource
url: ${URL2}?useUnicode=true&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: ${USER2}
password: ${PSSWD2}
driverClassName: com.mysql.jdbc.Driver
hikari:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
poolName: pool2
idleTimeout: 30000
connectionTimeout: 30000
minimumIdle: 5
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
database: MYSQL
show-sql: true
properties:
hibernate.id.new_generator_mappings: true
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
@Configuration
@EnableJpaRepositories(
basePackages = {"com.xx.attributes.repository.primary", "com.xx.attributes.repository.primary.custom"},
entityManagerFactoryRef = "primaryEM",
transactionManagerRef = "primaryTM"
)
public class PrimaryDataSource {
@Autowired
private Environment env;
private Properties jpaProperties() {
Properties properties = new Properties();
properties.put("database-platform", env.getRequiredProperty("spring.datasource.db1.jpa.database-platform"));
properties.put("database", env.getRequiredProperty("spring.datasource.db1.jpa.database"));
properties.put("show-sql", env.getRequiredProperty("spring.datasource.db1.jpa.show-sql"));
properties.put("hibernate.id.new_generator_mappings", env.getRequiredProperty("spring.datasource.db1.jpa.properties.hibernate.id.new_generator_mappings"));
properties.put("hibernate.cache.use_query_cache", env.getRequiredProperty("spring.datasource.db1.jpa.properties.hibernate.cache.use_query_cache"));
properties.put("hibernate.cache.use_second_level_cache", env.getRequiredProperty("spring.datasource.db1.jpa.properties.hibernate.cache.use_second_level_cache"));
if (env.getProperty("spring.datasource.db1.jpa.properties.hibernate.dialect") != null) {
properties.put("hibernate.dialect", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.dialect"));
}
return properties;
}
@Primary
@Bean(name = "primaryEM")
public LocalContainerEntityManagerFactoryBean db1EntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(firstDataSource());
em.setPackagesToScan(
new String[] { "com.xx.attributes.domain.primary" });
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(jpaProperties());
em.setPersistenceUnitName(DefaultPersistenceUnitManager.ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME);
return em;
}
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource firstDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "primaryTM")
public PlatformTransactionManager db1TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db1EntityManager().getObject());
return transactionManager;
}
}
@Configuration
@EnableJpaRepositories(
basePackages = "com.xx.attributes.repository.secondary",
entityManagerFactoryRef = "secondaryEM",
transactionManagerRef = "secondaryTM"
)
public class SecondaryDataSource {
@Autowired
private Environment env;
private Properties jpaProperties2() {
Properties properties = new Properties();
properties.put("database-platform", env.getRequiredProperty("spring.datasource.db2.jpa.database-platform"));
properties.put("database", env.getRequiredProperty("spring.datasource.db2.jpa.database"));
properties.put("show-sql", env.getRequiredProperty("spring.datasource.db2.jpa.show-sql"));
properties.put("hibernate.cache.use_query_cache", env.getRequiredProperty("spring.datasource.db2.jpa.properties.hibernate.cache.use_query_cache"));
properties.put("hibernate.id.new_generator_mappings", env.getRequiredProperty("spring.datasource.db2.jpa.properties.hibernate.id.new_generator_mappings"));
properties.put("hibernate.cache.use_second_level_cache", env.getRequiredProperty("spring.datasource.db2.jpa.properties.hibernate.cache.use_second_level_cache"));
if (env.getProperty("spring.datasource.db2.jpa.properties.hibernate.dialect") != null) {
properties.put("hibernate.dialect", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.dialect"));
}
return properties;
}
@Bean(name = "secondaryEM")
public LocalContainerEntityManagerFactoryBean db2EntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(secondDataSource());
em.setPackagesToScan(new String[] { "com.xx.attributes.domain.secondary" });
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(jpaProperties2());
em.setPersistenceUnitName("secondary");
return em;
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource secondDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryTM")
public PlatformTransactionManager db2TransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
db2EntityManager().getObject());
return transactionManager;
}
}