首页 新闻 搜索 专区 学院

Spring定时任务执行两次

0
[已关闭问题] 关闭于 2017-07-07 10:07

我写了一个Spring定时任务,在执行时,它却跑了两遍,网上的方法也试过了不行,在这里希望有大神指路,跪谢!

问题补充:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- ______________________________调度配置开始______________________________ -->
    <!-- 配置调度类 -->
    <bean id="reportSchedule" class="com.ly.filter.ReportSchedule"></bean>
    <!-- 配置MethodInvokingJobDetailFactoryBean -->
    <bean id="jobtask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="reportSchedule"></property>
        <!--  <property name="targetMethod" value="qdwy_loginReport"></property>-->
        <property name="targetMethod" value="qdwy_hyloginReport"></property>
    </bean>
    
    <!-- 配置定时表达式 -->
    <bean id="doTime2" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobtask2"></property>
        <property name="cronExpression" value="0 0 15 * * ? *"></property>
    </bean>
    
    <!-- 配置调度工厂:如果将lazy-init='false'那么容器启动就会执行调度程序 -->
    <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="doTime2"/>
            </list>
        </property>
    </bean>
    <!-- 调度配置结束 -->    
</beans>

 

 

调度类

package com.ly.filter;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.inject.Inject;

import org.joda.time.DateTime;

import com.ly.entity.background.Group;
import com.ly.entity.background.LoginTempReport;
import com.ly.mapper.LoginMonthReportMapper;

public class ReportSchedule {
    @Inject
    private LoginMonthReportMapper loginMonthReportMapper;
    
    
        public void qdwy_loginReport(){
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":调度开始");
            
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":调度结束");
        }
        
        public void qdwy_hyloginReport(){
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":调度开始");
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":调度结束");
        }
        
    
}

 

举林会天下的主页 举林会天下 | 菜鸟二级 | 园豆:202
提问于:2017-07-06 09:51
< >
分享
所有回答(2)
0

执行一次就关掉啊

夜里挑键戳灯 | 园豆:297 (菜鸟二级) | 2017-07-06 11:34

它是在一次定时内跑了两次,如何关闭?

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-06 13:09
0

代码和配置贴出来

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-06 13:03

配置贴出来了,帮看看有没有没写的?谢谢啦

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-06 13:08

@举林会天下: 

我也没从配置找到问题, 但是 我注意到配置中一开始有两个 targetMethod ,后来注释掉了一个,

<!--  <property name="targetMethod" value="qdwy_loginReport"></property>-->
        <property name="targetMethod" value="qdwy_hyloginReport"></property>

是否配置没有重新部署而未生效,

 

重新部署一下,再修改方法中的输出区分一下方法,再看看输出是什么样的:

 public void qdwy_loginReport(){
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":qdwy_loginReport调度开始");
            
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":qdwy_loginReport调度结束");
        }
        
        public void qdwy_hyloginReport(){
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":qdwy_hyloginReport调度开始");
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":qdwy_hyloginReport调度结束");
        }

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-06 13:27

@苍枫露雨:一开始配置中的两个方法放一块,有报错,之后 我把配置中的两个方法分开写,但结果还是执行了两遍。。。。,还有什么其他的思路吗?

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-06 17:07

@举林会天下: 

刚刚看了下,一个 MethodInvokingJobDetailFactoryBean 中只能配置一个方法。

你修改输出了吗?改了输出的结果是什么?

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-06 17:30

@苍枫露雨: 输出的结果:一个方法结束后输出‘’调度结束’两次

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-06 18:13

@举林会天下: 

再问两个问题:

1. web.xml是怎么配置的?

2. 现象是定时任务第一次执行两次,还是一直都是执行两次? 把执行的线程名称打印出来Thread.currentThread().getName()

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-06 19:54

@举林会天下: 

感觉像是bean加载了两次,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-07 11:03

@苍枫露雨: 它如何加载了两次呢?又是在哪里加载了两次呢?是配置文件吗,可是我只在Spring中注入了一遍啊

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-07 11:50

@举林会天下: 

看下你web.xml的配置

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-07 14:02

@苍枫露雨: web.xml需要配置什么,我没有在web.xml中配置啊,要不你贴一下web.xml的代码

支持(0) 反对(0) 举林会天下 | 园豆:202 (菜鸟二级) | 2017-07-07 16:38

@举林会天下: 

web.xml没有配置,怎么去找到spring的配置文件去扫描bean呢,

你看看web.xml中有没有类似下面的代码

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
</context-param>

 

还有之前的说的打印线程名称的结果怎么样?

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-10 15:34

@举林会天下: 

或者你把代码发到github或者oschine git上,我给你看看,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-10 15:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册