我发现了以下问题,我想知道它是否是正常行为(如果是这样,为什么?)或者它是否是Spring的错误。我有一个Spring上下文文件,用于定义Scheduled-tasks。如果在我的整个应用程序上下文中多次导入此文件,则该任务也会多次执行。
E.g。 我有一个上下文文件:a-context.xml:
...
<task:scheduler id="scheduler" pool-size="5"/>
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="archiveTask" method="run" cron="0 * * * * *"/>
</task:scheduled-tasks>
<bean id="archiveTask" class="ch.post.ehealth.referral.core.task.ArchiveTask" />
...
假设我也有这个b-context.xml:
...
<import resource="classpath:./a-context.xml" />
...
最后我的application-context.xml:
...
<import resource="classpath:./a-context.xml" />
<import resource="classpath:./b-context.xml" />
...
在这种情况下,我的任务执行两次,因为它是&#34;导入&#34;两次。如果我在application-context.xml中移动任务:scheduled-tasks部分,那么它只按预期执行一次。这是正常的,如果是的话为什么? 我不明白,因为豆子的行为不同。例如。这种情况不会对只会创建一次的bean产生问题。
由于
更新
我的web.xml:
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener- class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.gwtrpcspring.RemoteServiceDispatcher</servlet-class>
</servlet>
...
答案 0 :(得分:0)
在下面的代码中,加载了“application-context.xml”。在appication-context.xml中,您已经导入了两次.context。这意味着它已被加载两次,因此我们的scehduler也会被触发两次。如果已经加载了bean xml,那么Spring仍然无法避免,然后避免第二次加载它。所以我们在导入时要特别小心,特别是当我们使用调度程序时。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</context-param>