我有一个名为“CacheService”的模块,它执行一些缓存工作,它有一个名为“preheatCache”的方法,该方法在启动时构建缓存内容。 Web 应用程序服务器和任务应用程序服务器都引用的“CacheService”。 Web服务器和任务服务独立启动,当任务服务器启动时,我不希望执行“preheatCache”。我怎样才能实现这个?
CacheService中启动服务器时自动调用preheatCache的代码:
@EventListener(ContextRefreshedEvent.class)
public void afterStartup() {
preheatCache();
}
private preheatCache(){
// build cache content
}
该事件在 Web 服务器和任务服务器中均触发。
我像这样尝试了@ConditionalOnWebApplication
@ConditionalOnWebApplication
private preheatCache(){
// build cache content
}
但是好像不行
是否有一些注释或Spring的机制作用于一个方法,使该方法只在Web服务器中调用?
最佳答案
它必须是一个公共(public)方法才能允许 AOP 启动
@ConditionalOnWebApplication
public void preheatCache(){
// build cache content
}
并且不能从 bean 本身调用 - 因此您必须自行注入(inject)该 bean 并使用注入(inject)进行调用
@Autowired
private BeanContainingThatMethod self;
@EventListener(ContextRefreshedEvent.class)
public void afterStartup() {
self.preheatCache();
}
如果我是你,我会为此创建专用的 bean(除非就是这个)并注释整个 bean。这样,仅当存在 Web 上下文时才会创建和管理整个 bean,否则将跳过创建。
关于java - Spring:如何仅在Web应用程序中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59190411/