我们经常会遇到不重启服务,自动刷新配置的需求。该如何实现呢?
@Scope(“prototype”) - 热更新
如上文中的BarService
,每次变更配置文件中的x.bar
配置信息,都能及时应用到service中。
@Slf4j
@Component
@Scope("prototype") // prototype原型模式
public class BarService {
@Value("${x.bar}")
private String bar;
public void bar() {
log.info("---bar:{} ,{}", bar, this);
}
}
code
ConfigRefreshEvent
public class ConfigRefreshEvent extends ApplicationEvent {
@Getter
@Setter
private String path;
public ConfigRefreshEvent(Object source) {
super(source);
}
public ConfigRefreshEvent(Object source, String path) {
super(source);
this.path = path;
}
}
ConfigRefreshEventListener
@Component
public class ConfigRefreshEventListener implements ApplicationListener<ConfigRefreshEvent> {
@Autowired
ConfigurableEnvironment configurableEnvironment;
@Autowired
private GenericApplicationContext applicationContext;
@Override
public void onApplicationEvent(ConfigRefreshEvent event) {
<