如何解决Micronaut:如何用@Context 替换@EventListener 与@Singleton 的组合?
@Singleton
class EventStarter {
@Value("${very.important.key}")
private String key;
public EventStarter(MyEvents events) {
this.events = events;
}
private final MyEvents events;
@EventListener
void onApplicationEvent(ServerStartupEvent event) throws IOException {
events.register(key);
}
}
我听说我可以重构此代码以使用 @Context
批注而不是使用 @EventListener
。我曾尝试这样做,但我失败了。
@Context
@Singleton
@Requires(property = "JASYPT_ENCRYPTOR_PASSWORD")
public class JasyptDecryptor implements BeanInitializedEventListener<Environment> {
public JasyptConfigurationPropertiesDecryptor(DefaultEnvironment environment,@Value("${JASYPT_ENCRYPTOR_PASSWORD}") String encryptedPassword) {
LOGGER.info("JasyptBootstrapDecryptor started");
processConfigurationProperties(environment,encryptedPassword);
}
private void processConfigurationProperties(DefaultEnvironment environment,String encryptedPassword) {
// unrelated code here
}
@Override
public Environment onInitialized(BeanInitializingEvent<Environment> event) {
return event.getBean();
}
}
这个类正在实现BeanInitializedEventListener<Environment>
。我应该在我的 EventStarter
类中以某种方式实现它吗?据我了解,它不应该将 Environment
作为一种类型,但它应该是什么? ServerStartupEvent
?
在某些时候,我达到了这样的境界:
@Context
@Singleton
@Requires(property = "${very.important.key}")
class EventStarter implements BeanInitializedEventListener<ServerStartupEvent> {
public EventStarter(MyEvents events) {
this.events = events;
startEvents()
}
private final MyEvents events;
private void startEvents() throws IOException {
events.register(key);
}
@Override
public Environment onInitialized(BeanInitializingEvent<ServerStartupEvent> event) {
return event.getBean();
}
}
它似乎有效......部分 - 我得到了一个例外,只是很少提到“令牌”,所以似乎这个 ${very.important.key}
是,正如我推测的那样,是空的或空的,所以它不是从application.yml
读取。
我在这里做错了什么?有没有办法做到这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。