我创建了一个名为refreshable的自定义注解,用于可刷新bean
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Component
@DependsOn(value = "envProcessor")
@RefreshScope
public @interface Refreshable {}
把它放在
@Refreshable
public class Foo {
@Value("${greet.msg:Hello}")
private String msg;
public Foo () {
System.out.println("constructor in Foo bean");
}
@PostConstruct
public void init() {
System.out.println("Post constructor in Foo bean");
}
public String getGreetingMessage(name) {
return String.format("%s %s", msg, name);
}
}
下面是api实现,getgreetingmessage用于获取问候语消息,changegreetingmessage用于更新greet.msg环境值和刷新bean
@Service
public class FooServiceImpl implements FooServiceInterface {
@Autowired
private Foo foo;
@Autowired
private ContextRefresher contextRefresher;
@Override
public User getGreeting(String val) {
return foo.getGreetingMessage(val);
}
@Override
public Set<String> changeGreetingMessage(String val) {
System.setEnvValue("greet.msg", value);
return contextRefresher.refresh();
}
}
我遵循的步骤:
调用getgreeting api(localhost:8080/getgreeting?val=steve)回答是“你好,史蒂夫”
调用changegreetingmessage api(localhost:8080/getgreeting/refresh?val=hey)答案是【】
调用getgreeting api(localhost:8080/getgreeting?val=steve)回应仍然是“你好史蒂夫”而不是“嘿史蒂夫”
注意:当我直接在foo上注解@refreshscoped时,一切正常,如下所示
@Refreshable
@RefreshScope
public class Foo {
不知道为什么spring在@refreshable注解上标记@refreshscope注解时不接受@refreshscope注解,但是@component和@dependson注解工作正常。
感谢您的帮助,如果需要其他信息,请告诉我。
暂无答案!
目前还没有任何答案,快来回答吧!