我正在使用Spring Boot 1.5.15,HikariCP 3.2.0和2个数据库,MSSQL和Oracle。 则yml文件中凭据的jdbc字符串正确,应用程序成功启动。另外,如果在应用程序工作期间连接失败,那么它也可以正常工作,并且只是自动重新连接到数据库,这是可能的。但是,如果第二个Oracle数据库关闭或类似问题,我需要有空来启动应用程序。因此,然后我为此更改了jdbc字符串,并尝试启动它失败的应用程序
com.zaxxer.hikari.pool.HikariPool $ PoolInitializationException:无法初始化池:
我在搜索网络中找到了不同的HikariCP属性或spring.datasource属性,然后尝试使用它们,但没有帮助。 您能帮我解决这个问题的方法吗?
我使用yml文件对其进行配置:
spring:
datasource:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver:***
username: ***
password: ***
type: com.zaxxer.hikari.HikariDataSource
jpa:
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
properties:
dialect: org.hibernate.dialect.SQLServer2012Dialect
database: default
jackson:
date-format: com.fasterxml.jackson.databind.util.StdDateFormat
logging:
config: classpath:logback-remote.xml
file: /usr/share/tomcat/app.log
pqa:
integration:
datasource:
driverClassName: oracle.jdbc.OracleDriver
url: jdbc:oracle:***
username: ***
password: ***
type: com.zaxxer.hikari.HikariDataSource
和Java配置,这两个数据源的代码
MyApplication.class
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
ApplicationConfig.class
@Configuration
@Import({
ControllerConfig.class,
PersistenceConfig.class,
PlrIntegrationConfig.class,
SecurityConfig.class
})
public class ApplicationConfig {
}
PersistenceConfig.java
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
basePackages = {"com.my.app.repository"})
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class PersistenceConfig {
@Autowired
private Environment env;
@Value("${spring.datasource.url}")
private String jdbcUrl;
@Value("${spring.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Primary
@Bean(name = "dataSource")
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClassName);
config.setJdbcUrl(jdbcUrl);
config.setUsername(username);
config.setPassword(password);
config.addDataSourceProperty("minimum-idle", "8");
config.addDataSourceProperty("maximum-pool-size", "100");
config.addDataSourceProperty("idle-timeout", "10000");
config.addDataSourceProperty("connection-timeout", "10000");
config.addDataSourceProperty("max-lifetime", "120000");
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
@Qualifier("dataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.my.app.entity")
.properties(additionalJpaProperties())
.persistenceUnit("app")
.build();
}
private Map<String, ?> additionalJpaProperties() {
Map<String, String> jpaProperties = new HashMap<>();
jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
jpaProperties.put("hibernate.dialect", env.getProperty("spring.jpa.properties.dialect"));
jpaProperties.put("hibernate.show_sql", env.getProperty("spring.jpa.show-sql"));
jpaProperties.put("hibernate.format_sql", env.getProperty("spring.jpa.properties.hibernate.format_sql"));
return jpaProperties;
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean
public AuditorAware<String> auditorProvider(){
return new AuditorAwareImpl();
}
}
PlrIntegrationConfig.class
@Configuration
@ComponentScan(value = {
"com.my.app.integration.plr.job",
})
@Import({PlrIntegrationPersistenceConfig.class})
public class PlrIntegrationConfig {
}
PlrIntegrationPersistenceConfig.class
@EnableJpaRepositories(entityManagerFactoryRef = "plrInEntityManagerFactory",
transactionManagerRef = "plrInTransactionManager",
basePackages = {"com.my.app.integration.plr.persistence.repository"})
@Configuration
public class PlrIntegrationPersistenceConfig {
@Value("${pqa.integration.datasource.url}")
private String jdbcUrl;
@Value("${pqa.integration.datasource.driverClassName}")
private String driverClassName;
@Value("${pqa.integration.datasource.username}")
private String username;
@Value("${pqa.integration.datasource.password}")
private String password;
@Bean(name = "plrInDataSource")
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClassName);
config.setJdbcUrl(jdbcUrl);
config.setUsername(username);
config.setPassword(password);
config.addDataSourceProperty("minimum-idle", "8");
config.addDataSourceProperty("maximum-pool-size", "100");
config.addDataSourceProperty("idle-timeout", "10000");
config.addDataSourceProperty("connection-timeout", "10000");
config.addDataSourceProperty("max-lifetime", "120000");
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
@Bean(name = "plrInEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean plrInEntityManagerFactory(EntityManagerFactoryBuilder builder,
@Qualifier("plrInDataSource") DataSource dataSource) {
LocalContainerEntityManagerFactoryBean plrInEMFBean = builder.dataSource(dataSource)
.packages("com.my.app.integration.plr.persistence.entity")
.persistenceUnit("plrIn")
.build();
Map<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", "org.hibernate.dialect.Oracle12cDialect");
plrInEMFBean.setJpaPropertyMap(properties);
return plrInEMFBean;
}
@Bean(name = "plrInTransactionManager")
public PlatformTransactionManager plrInTransactionManager(@Qualifier("plrInEntityManagerFactory") EntityManagerFactory plrInEntityManagerFactory) {
return new JpaTransactionManager(plrInEntityManagerFactory);
}
}
更新: 修正,需要添加
config.setInitializationFailTimeout(-1L);
在secondDataSource配置中
答案 0 :(得分:0)
已修复,需要添加
config.setInitializationFailTimeout(-1L);
在secondDataSource配置中