Я настроил bean-компонент в @RefreshScope в загрузочном приложении Spring и переопределил конфигурацию источника данных, как показано ниже:
@Configuration
public class DataSourceConfig {
@Autowired
private DbConfig dbConfig;
@Bean
@Primary
@RefreshScope
public DataSource dataSource() {
HikariDataSource dataSource=new HikariDataSource();
dataSource.setJdbcUrl("jdbc:h2:file:~/spring-boot-h2-db");
dataSource.setUsername(dbConfig.getUsername());
dataSource.setMaximumPoolSize(dbConfig.getMaxPoolSize());
dataSource.setPassword("");
dataSource.setDriverClassName("org.h2.Driver");
return dataSource;
}
}
И DbConfig:
@PropertySource("file:/Users/rarifi/temp/application.properties")
@RefreshScope
@Component
@ConfigurationProperties(
prefix = "spring.datasource"
)
public class DbConfig {
@Value("username")
private String username;
private int maxPoolSize;
public int getMaxPoolSize() {
return maxPoolSize;
}
public void setMaxPoolSize(int maxPoolSize) {
this.maxPoolSize = maxPoolSize;
}
@Autowired
private StandardEnvironment environment;
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
И я вызываю refreshEndpoint.refresh после обновления файлов свойств конфигурации в другом фрагменте кода. Во время обновления код входит в getDatasource, но все еще указывает на те же свойства, которые использовались во время инициализации. Что нужно изменить, чтобы он читал измененные свойства? Свойства обновляются во время выполнения, если они не определены как @ RefreshScope