【发布时间】:2019-10-01 03:43:08
【问题描述】:
所以,我使用@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 在连接错误时关闭或打开连接?
【问题讨论】:
标签: spring-boot hikaricp spring-mybatis