如何解决有没有办法从配置中为最终变量赋值?
我有一个方法可以监听 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 举报,一经查实,本站将立刻删除。