@RefreshScope не работает должным образом - SpringBoot - PullRequest
0 голосов
/ 28 октября 2018

Я настроил 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

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я наконец выяснил проблему. Это было связано не с аннотацией @RefreshScope, а со способом перезагрузки свойств. Я изменил @PropertySource с @PropertySource («файл: /Users/rarifi/temp/application.properties») на @PropertySource («classpath: /application.properties»), и он начал работать правильно. Также это работает, когда я устанавливаю местоположение в spring.config.location как переменную окружения при запуске приложения

0 голосов
/ 28 октября 2018

Вам необходимо переместить аннотацию @RefreshScope в контексте класса.

@Configuration
@RefreshScope

public class DataSourceConfig {
  ....
}
...