`
足至迹留
  • 浏览: 496844 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<spring> 定时任务每次都执行两次的问题,慎用new ClassPathXmlApplicationContext()

阅读更多
1.问题描述
singleton的bean,spring配置定时任务<task:scheduled-tasks>新增一个定时任务后每次触发定时任务都是执行两次。

2.问题分析
新增的定时任务类有点特殊,里面调用了另一个不受spring管理的对象,这个对象里又需要使用spring管理的单例bean,就在对象里使用了new ClassPathXmlApplicationContext()然后getBean()获取。
一切看似正常,问题就出在new ClassPathXmlApplicationContext()这里。当显式的这样调用的时候,会再次加载bean,初始化spring上下文环境。相当于容器里除了刚启动时的一套之外又产生了一条spring上下文,当然定时任务也有了两套。
这里还说明另一个问题,单实例的bean并不是“单例模式”,只是保证一套spring上下文里只有一个bean实例。

3.解决办法
方法1)把新增的定时任务类也纳入spring管理范围,直接获取其他spring管理的bean.
方法2)使用ApplicationContextAware获取容器启动时的spring上下文环境。

还可以参考:
http://blog.csdn.net/budapest/article/details/38493003
http://www.blogjava.net/freeman1984/archive/2010/08/30/330214.html
1
0
分享到:
评论
1 楼 zhanggang807 2018-04-04  
第二种方法比较好

相关推荐

    spring3配置quartz定时任务

    总结,通过以上步骤,我们就成功地在Spring 3中配置了Quartz定时任务,实现了每10秒执行一次的任务。在实际应用中,你可以根据需求定义更复杂的作业和触发器,以及使用Quartz的其他高级特性,如集群支持、持久化作业...

    spring3 配置quartz定时任务的使用

    -- 是否可并发执行,如果为true,当任务触发时,即使上一次任务未执行完也会立即执行 --&gt; &lt;property name="concurrent" value="false"/&gt; &lt;/bean&gt; &lt;!-- Trigger 调度配置 --&gt; &lt;bean id="myTrigger" class="org....

    spring整合quartz

    Spring整合Quartz是一个常见的任务调度解决方案,用于在Java应用程序中执行定时任务。Quartz是一个功能强大的、开放源代码的作业调度框架,而Spring框架则提供了一种优雅的方式来管理和集成Quartz到我们的应用中。让...

    Spring Quartz 任务调度实例

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...

    java定时任务代码-spring管理.txt

    根据提供的文件信息,本文将详细解析Java定时任务与Spring框架集成的相关知识点,包括如何在Spring环境中配置和管理定时任务。 ### Java定时任务简介 在Java中实现定时任务主要有以下几种方式: 1. **Timer和...

    Spring整合Quartz

    至此,Spring与Quartz的整合已经完成,定时任务将在设定的时间点自动执行。在需要的时候,可以调用`scheduler.shutdown()`来停止调度。 ### 4. 扩展与优化 在实际项目中,可以进一步优化和扩展,例如: - 使用...

    spring定时器代码注释

    - `jobClass` 属性用于设置执行定时任务的具体类,该类需要实现 `org.quartz.Job` 接口或继承 `org.springframework.scheduling.quartz.QuartzJobBean`。 ```xml &lt;bean id="quartzClock" class="org.spring...

    tedu二阶段Spring课堂随手

    &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-context&lt;/artifactId&gt; &lt;version&gt;5.3.24&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 配置文件示例: ```xml &lt;beans xmlns=...

    spring定时器

    在测试类中,通过`ClassPathXmlApplicationContext`加载Spring配置文件,并获取`Scheduler`对象来验证定时任务是否按预期执行。 ### 总结 通过上述两种方式,我们可以利用Spring框架和Quartz库来轻松实现系统的...

    cxf与spring整合,以及webservice传输验证demo

    &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-context&lt;/artifactId&gt; &lt;version&gt;5.x.x.RELEASE&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 其他Spring相关依赖 --&gt; &lt;/dependencies&gt; ``` 接下来,我们创建一个...

    CXF3.0+Spring3.2 RESTFul服务

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml"); context.start(); System.out.println("Service started."); // 等待服务运行 try { Thread.sleep(Long....

    Spring 配置文件详解.doc

    ApplicationContext orderServiceContext = new ClassPathXmlApplicationContext(serviceResources); ``` Setter 注入和构造函数注入 Spring 提供了三种注入方式:构造函数注入、Setter 注入和方法(接口)注入。...

    spring配置定时器

    本文将基于给定的文件信息“spring配置定时器”,详细阐述如何利用Spring框架配置一个简单且高效的定时任务。 ### 一、Spring定时器概述 #### 1.1 定时器简介 Spring框架提供了多种实现定时任务的方式,包括但不...

    简单学习使用Spring+Velocity发送邮件

    &lt;bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"&gt; &lt;property name="resourceLoaderPath" value="/WEB-INF/velocity/" /&gt; &lt;property name=...

    Spring mail发送邮件实例

    &lt;artifactId&gt;spring-context-support&lt;/artifactId&gt; &lt;version&gt;${spring.version}&lt;/version&gt; &lt;/dependency&gt; ``` 其中 `${spring.version}` 需要替换为实际使用的 Spring 版本号。 2. **配置邮件服务器**:在 ...

    Test05_Spring_Context_XML.rar

    &lt;artifactId&gt;spring-context-test&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-context&lt;/artifactId&gt; &lt;version&gt;...

    模拟spring中的ClassPathXmlApplicationContext类的实现

    4. **Bean定义**:解析XML的过程中,每个`&lt;bean&gt;`标签都会被解析成一个`BeanDefinition`对象,其中包含了bean的完整信息,如类名、属性值、依赖关系等。 5. **注册BeanDefinition**:解析后的`BeanDefinition`会被...

    Spring笔记.md

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); Student student = (Student) applicationContext.getBean("student"); System.out.println(student); ``` #### 四、...

Global site tag (gtag.js) - Google Analytics