微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法从配置中为最终变量赋值?

如何解决有没有办法从配置中为最终变量赋值?

我有一个方法可以监听 webhook 队列,方法签名需要 webhook 名称作为最终变量。这个WEBHOOK_QUEUE变量需要根据环境不同而不同。 (sandBox,production) 有没有办法在不改变代码的情况下在不同的环境下解决这个问题?

@ApplicationScoped
public class WebhookEventObserver {
private static final String WEBHOOK_QUEUE = "V3-SANDBox-WEBHOOK";


@Inject
private WebhookProcessor processor;

public void onMessage(@Observes @Queue(name = WEBHOOK_QUEUE) MessageEvent event) {
    logger.info("Received [{}] message from [{}]",event,WEBHOOK_QUEUE);
    processor.handleEvent(event);
}
}

解决方法

将字段从常量更改为注入的配置属性:

@ApplicationScoped
public class WebhookEventObserver {

    @Inject @ConfigurationValue("webhookQueue")
    private String webhookQueue;

    @Inject
    private WebhookProcessor processor;

    public void onMessage(@Observes MessageEvent event) {
        // check queue here
        logger.info("Received [{}] message from [{}]",event,webhookQueue);
        processor.handleEvent(event);
    }
}

您不能使用动态队列名称执行 @Queue(name = WEBHOOK_QUEUE),因此删除该事件限定符,并添加逻辑来检查它。

不知道MessageEvent是什么,所以不知道如何查看事件的队列。

,

在不修改代码的情况下不可能获得确切的行为。但是,您只需删除静态最终常量即可。直接用属性值 @Value("${webhookQueue}") 替换常量。下面是一个例子:

public void onMessage(@Observes @Queue(name =@Value("${webhookQueue}")) MessageEvent event)

在每个属性文件中为 webhookQueue 提供适当的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。