我已经在Spring引导应用程序的@RefreshScope中配置了一个bean,并覆盖了如下所示的数据源配置:
@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
,则会在运行时更新属性答案 0 :(得分:0)
您需要在类上下文上移动@RefreshScope注释。
@Configuration
@RefreshScope
public class DataSourceConfig {
....
}
答案 1 :(得分:0)
我终于找到了问题所在。它与@RefreshScope批注无关,但与重新加载属性的方式有关。我将@PropertySource从@PropertySource(“ file:/Users/rarifi/temp/application.properties”)更改为@PropertySource(“ classpath:/application.properties”),它开始正常工作。当我在运行应用程序时将spring.config.location中的位置设置为环境变量时,它也起作用