spring boot @refreshscope不更新数据源

时间:2017-08-08 07:41:23

标签: java spring spring-mvc spring-boot spring-boot-actuator

如果DB.URL的环境变量发生更改,我正在尝试更新DB数据源。以下是我的班级,

@SpringBootApplication
@ConfigurationProperties(value="myapp")
public class MyApp {
@Value("${myapp.db.url}")
String databaseURL;

@Value("${myapp.db.username}")
String databaseUsername;

@Value("${myapp.db.password}")
String databasePassword;

public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
}

@Bean
@RefreshScope
@Primary
public DataSource getDataSource() {
    return DataSourceBuilder.create().username(databaseUsername).password(databasePassword).url(databaseURL)
            .driverClassName("org.postgresql.Driver").build();
}
}

但是当我更新环境DB.URL时,它不会向新数据库发出请求。

我已经参考了文档,因为可以更新数据源, http://projects.spring.io/spring-cloud/spring-cloud.html#_refresh_scope

我班上缺少什么?

2 个答案:

答案 0 :(得分:0)

您需要在类上下文 MyApp 上移动此 @RefreshScope 注释:

@SpringBootApplication
@ConfigurationProperties(value="myapp")
@RefreshScope
public class MyApp {
  ...
}

此外,请确保在服务http://{your.api.url}/actuator/refresh上请求POST,以便在更改属性后刷新它。

答案 1 :(得分:0)

如果将 @RefreshScope 添加到类而不从方法中删除。然后,将刷新 @Value 变量。并且数据源将改变。