#java #spring-boot #spring-boot-actuator
Вопрос:
У меня есть класс MyDataSource с аннотациями @Configuration
, и в нем есть метод, возвращающий компонент «HikariDatasource». Этот метод снабжен @Bean
комментариями, а также RefreshScoope
.
@Configuration
public class MyDataSource {
@Autowired
private DatabaseProperties databaseProperties;
@RefreshScope
@Bean(name = "dataSource")
public DataSource dataSource() throws SQLException {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(databaseProperties.getDriverClassName());
dataSource.setUsername(databaseProperties.getUserName());
dataSource.setConnectionTimeout(databaseProperties.getConnectionTimeout());
dataSource.setConnectionInitSql(databaseProperties.getTestConnectionSql());
dataSource.setConnectionTestQuery(databaseProperties.getTestConnectionSql());
Log.i("DataSource bean created");
return dataSource;
}
}
Теперь мне нужно обновить dataSource
вручную или программно из другого класса. И только что нужно обновить этот боб. Он не обновляется автоматически, даже если там есть аннотация RefreshScope, потому что изменения не внесены databaseProperties
.
Как мне это сделать??
Я знаю об этом методе refresh(beanName)
, предоставленном, @RefreshScope
но не уверен, как его использовать, если он может быть использован в этом сценарии??
Комментарии:
1. что это значит обновить? почему вам нужно обновить подключение для опроса с теми же настройками? если вам нужно получить много разных подключений, попробуйте получить их в аргументах метода
dataSource(String driver, String user , String pass, String url... )
и сохранить их в aConcurrentHashMap<String,HikariDataSource>
, чтобы использовать по мере необходимости. или, если вам нужно контролировать активное время подключения для каждого опроса, вы можете использовать всю мощь hikarisetMaximumPoolSize
,setMaxLifetime
,setIdleTimeout
,setMinimumIdle
и других. не могли бы вы подробнее рассказать о своей проблеме?2. Спасибо @DilermandoLima за информацию. Таким образом, свойства базы данных обновляются с новыми настройками, но компонент источника данных не обновляется. Мне просто нужно обновить его вручную. Я устал ниже, но это не сработало.
RefreshScope refreshScope = new RefreshScope(); refreshScope.refreshAll();