我有一个 servlet 的应用程序上下文 XML 文件 ( /app/feature
)。整个 Web 应用程序也有一个应用程序上下文(即 servlet 上下文/app
),并且有多个带有其他 XML 文件的 servlet。我了解/app
作为/app/feature
.
当我放入<task:annotation-driven/>
子应用程序上下文时,检查了哪些 bean 的 @Async 和 @Scheduled 注释?
我有一个 servlet 的应用程序上下文 XML 文件 ( /app/feature
)。整个 Web 应用程序也有一个应用程序上下文(即 servlet 上下文/app
),并且有多个带有其他 XML 文件的 servlet。我了解/app
作为/app/feature
.
当我放入<task:annotation-driven/>
子应用程序上下文时,检查了哪些 bean 的 @Async 和 @Scheduled 注释?
像这样的task:annotation-driven
寄存器 BeanPostProcessors 是ScheduledAnnotationBeanPostProcessor
针对每个容器的:
...beans that are defined in one container are not post-processed by
a BeanPostProcessor defined in another container, even if both containers
are part of the same hierarchy.
内部逻辑是这样的,例如:applicationContext.xml
你说的是父文件,spring-servlet.xml
是你说的子文件。然后当tomcat启动时,首先将applicationContext.xml中的所有bean都实例化,其次将spring-servlet.xml中的所有bean实例化,然后会发生一些事情,如果bean A在applicationContext.xml和spring中都配置了-servlet.xml,那么 A 的第一个实例将被第二个实例覆盖。所以如果你添加<task:annotation-driven/>
in applicationContext.xml
,它就不起作用了,因为整个 bean 已经被 spring-servlet.xml 中实例化的 bean 覆盖了。
它将寻找@Async,其中@Scheduled 将使您能够安排每5000 毫秒之后的执行。