Можем ли мы закрыть и открыть соединение из конфигурации бина? - PullRequest
0 голосов
/ 01 октября 2019

Итак, я создаю некоторое соединение с базой данных, используя конфигурацию @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 закрыть или открыть соединение при ошибке соединения?

1 Ответ

0 голосов
/ 01 октября 2019

Ну, мой короткий ответ: вам не нужно беспокоить соединения с БД, когда у вас есть пул соединений, такой как Hikari. В конце концов вам нужен какой-то способ запроса вашей БД, верно? Вы можете сделать это с помощью интерфейса @Repository, который расширяет либо CrudRepository, либо JpaRepository. Таким образом, вы быстро встаете и бегаете. Управление подключениями к БД вручную не рекомендуется, если вы взяли Spring Boot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...