@RefreshScope无法按预期工作-SpringBoot

时间:2018-10-28 04:53:05

标签: spring spring-boot spring-cloud

我已经在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

,则会在运行时更新属性

2 个答案:

答案 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中的位置设置为环境变量时,它也起作用