spring cloud@refreshscope在自定义元注解中使用时不起作用

zc0qhyus  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(411)

我创建了一个名为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注解工作正常。
感谢您的帮助,如果需要其他信息,请告诉我。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题