因此,我使用@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关闭或打开连接?
答案 0 :(得分:0)
好吧,我的简短回答是,当您拥有连接池(例如Hikari)时,您无需打扰数据库连接。您最终需要某种方式来查询数据库,对吗?您可以使用扩展了CrudRepository或JpaRepository的@Repository接口来实现。这样,您可以快速启动并运行。 如果您使用Spring Boot,手动管理数据库连接不是一个好主意。