Итак, я создаю некоторое соединение с базой данных, используя конфигурацию @bean
и используя hikariCP
для источника данных. Это код, который я сделал.
DatabaseConfiguration.java
...
@Primary
public SqlSessionFactoryBean logSessionFactory(@Named(ResourceConfiguration.LOG) final DataSource dataSource) throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
SqlSessionFactory sqlSessionFactory;
sqlSessionFactory = sqlSessionFactoryBean.getObject();
sqlSessionFactory.getConfiguration().addMapper(LogMapper.class);
return sqlSessionFactoryBean;
}
@Bean
public MapperFactoryBean<LogMapper> logMapperMapperFactoryBean(@Named(LOG) final SqlSessionFactoryBean sqlSessionFactoryBean) throws Exception {
MapperFactoryBean<LogMapper> factoryBean = new MapperFactoryBean<>(LogMapper.class);
factoryBean.setSqlSessionFactory(sqlSessionFactoryBean.getObject());
return factoryBean;
}
...
ResourceConfiguration.java
...
@Bean(name = LOG, destroyMethod = "")
@ConfigurationProperties(prefix = "datasource.log")
@Primary
public DataSource dataSourceLog() {
return new HikariDataSource();
}
...
свойства приложения
...
datasource.log.jdbcUrl=<....>
datasource.log.username=<....>
datasource.log.password=<....>
datasource.log.maximum-pool-size=10
datasource.log.max-lifetime=0
datasource.log.idle-timeout=300000
datasource.log.leak-detection-threshold=2000
datasource.log.connection-timeout=30000
datasource.log.leak-detection-threshold=30000
datasource.log.initialization-fail-timeout=0
...
Программа всегда открыта, чтобы получить соединение в первый раз, если маппер получил удар, и я вызываю класс маппера, используя @Autowired
, когда мне это нужно. Я ожидаю использовать открытое закрытое соединение, но это не так. Когда связь разрывается, hikariCP
всегда дает мне connection timeout 30000ms
. Есть ли способ заставить SqlSessionFactory закрыть или открыть соединение при ошибке соединения?