我们可以通过Bean配置关闭和打开连接吗?

问题描述 投票:0回答:1

因此,我使用@bean</code> configuration and using 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
1个回答
0
投票

嗯,我的简短回答是,当您拥有连接池(例如Hikari)时,您无需打扰数据库连接。您最终需要某种方式来查询数据库,对吗?您可以使用扩展了CrudRepository或JpaRepository的@Repository接口来实现。这样,您可以快速启动并运行。如果您使用Spring Boot,手动管理数据库连接不是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.