Как обновить компонент программно в весенней загрузке

#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... ) и сохранить их в a ConcurrentHashMap<String,HikariDataSource> , чтобы использовать по мере необходимости. или, если вам нужно контролировать активное время подключения для каждого опроса, вы можете использовать всю мощь hikari setMaximumPoolSize , setMaxLifetime , setIdleTimeout , setMinimumIdle и других. не могли бы вы подробнее рассказать о своей проблеме?

2. Спасибо @DilermandoLima за информацию. Таким образом, свойства базы данных обновляются с новыми настройками, но компонент источника данных не обновляется. Мне просто нужно обновить его вручную. Я устал ниже, но это не сработало. RefreshScope refreshScope = new RefreshScope(); refreshScope.refreshAll();