java - Spring:如何仅在 Web 应用程序中调用方法?
问题描述
我有一个名为“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 服务器中调用?
解决方案
它必须是允许 AOP 启动的公共方法
@ConditionalOnWebApplication
public void preheatCache(){
// build cache content
}
并且不能从 bean 本身调用 - 因此您必须自行注入该 bean 并使用注入进行调用
@Autowired
private BeanContainingThatMethod self;
@EventListener(ContextRefreshedEvent.class)
public void afterStartup() {
self.preheatCache();
}
如果我是你,我会为此创建专用 bean(除非这是一个)并注释整个 bean。这样,仅当存在 Web 上下文时才会创建和管理整个 bean,否则将跳过创建过程。
推荐阅读
- google-sheets - 如何计算第 1 列并在第 2 列返回当前行及以上行的特定 ID 号的结果?
- git - 来自列出的分支(主)的 git pull 不起作用,但可以与未列出的分支(主)一起使用
- firebase - Firebase 云消息推送通知显示 0% 打开和 0 点击
- python-3.x - python元组与特定数字比较
- java - JButton 不会改变 JPanel 上的大小或位置
- gdb - 使用 GDB 的几步指令
- r - 根据列名中的数字选择数据框列
- pdf - 如何在 FOP Apache 生成的 PDF 中显示表情符号
- javascript - 一个盒子上出现 ECONNREFUSED 错误,但另一个盒子上没有
- linux - 使用 wget 从 linux 终端下载 NC 格式的气候数据