springBoot 中定时任务在linux中执行了两次

原创 2018年04月17日 18:02:47

首先, springboot定时任务的实现步骤:

  1. 启动类添加注解  

@SpringBootApplication
@EnableScheduling
public class BaolideApplication extends SpringBootServletInitializer {

   public static void main(String[] args) {
      SpringApplication.run(BaolideApplication.class, args);
   }

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(BaolideApplication.class);
   }

}

2. 执行类中添加注解和cron表达式

@Scheduled(cron = "0 30 0,4,8,10,12,16,20 * * ?")
public void job(){
    Date start=new Date();
    insertPersonInfo();     //自定义方法 下面同样
    Date end=new Date();
    insertTime(start,end);
}

因为这里我有一个insertTime方法是记录插入时间的,发现项目部署在linux的tomcat中,每次都执行了两次,就在想为什么会这样,

首先这里代码肯定是没错的,在本地也只能执行一次,那么对比只有两个地方不一样,就是操作系统不同,再具体一点就是

一个是windows下的tomcat一个是linux中的tomcat,然后观察linux中tomcat项目启动的时候,发现日志中tomcat启动了

两次,这样就不难想象定时任务的实例就被实例化了两次,因为spring容器中的bean实例默认是单例且是在容器启动的时候

初始化,问题知道了,那怎么解决呢?

那么就要看tomcat的server.xml文件了

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

<Context docBase="baolide" path="/" />

首先把注释的东西都删掉,重点是在标红的地方,tomcat在启动的时候先去加载appBase又去加载docBase导致加载了两次,那么知道原因了就好解决了,修改一下以上的配置文件就好:

      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

<Context docBase="/home/tomcat/baolide/tomcat/webapps/baolide" path="/" />

将appBase配置为空,然后docBase配置自己要部署项目的具体位置,重启tomcat问题得到解决。

Spring 定时任务执行两次 解决办法

先说原因,看到同一个任务执行两次,而且是并行执行,同一时间点执行的代码输出一样,网上查了资料,原因是因为下面两段代码 spring mvc 配置文件 contextConfig...
  • sinat_21946155
  • sinat_21946155
  • 2016-03-16 14:23:23
  • 2884

@Scheduled Spring定时任务每次执行两次解决方案

在执行定时任务的时候我遇到了一种情况,一个定时器每次会被执行两次,这就让人有点困惑,猜测肯定是哪里配置出了问题(配了两个当前上下文情况),看了一下网上很多解释,没有找到与自己相匹配的情况,所以自己也不...
  • yangliding2011
  • yangliding2011
  • 2017-08-17 14:57:41
  • 3080

spring 定时任务执行两次

最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此。 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候...
  • tengdazhang770960436
  • tengdazhang770960436
  • 2015-07-16 12:23:42
  • 6422

spring 定时任务执行两次解决办法

今天在做一个项目的时候用到了Spring的定时计划任务。这是Spring的特色功能,可以根据设置在特定的时间或间隔时间做特定的事。 下面给出一个例子:...
  • tengdazhang770960436
  • tengdazhang770960436
  • 2014-11-18 14:37:58
  • 28283

SSH:解决Spring整合quartz定时任务执行两次问题

一.问题描述: 开发环境是Windows,测试环境是Linux,正式环境是Linux。 同样的代码,定时任务在在开发环境、测试环境中测试的定时任务只执行一次,而在正式环境执行2次。 各环境不同...
  • qq_30974715
  • qq_30974715
  • 2017-06-08 13:24:19
  • 1134

tomcat中的quartz定时任务每次都被执行了两次

这两天发现部署到tomcat中的quartz定时任务每回都被执行了两次,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题只发生于部署在tomcat服务器上,由tomcat的自启动导致。...
  • xy18930914
  • xy18930914
  • 2017-02-28 18:15:34
  • 3349

spring定时任务执行两次的原因与解决方法

最近遇到一个比较棘手的问题,由于场景需要,每天晚上11点执行一个定时任务,我用的是spring的定时器,具体的定时任务相关配置和代码如下,没啥毛病。。。 直接上代码: 1、项目下的配置文件serv...
  • yaobengen
  • yaobengen
  • 2017-04-21 11:05:54
  • 8245

linux下spring定时器执行两次问题

unpackWARs="true" autoDeploy="true">                                 prefix="localhost_access_log....
  • sunshine901106
  • sunshine901106
  • 2017-02-22 16:35:35
  • 352

SpirngMVC系统启动系统配置初始化执行顺序以及防止onApplicationEvent执行两次

这里面加入了springMVC,因此基本的启动执行后用到的重载方法都列出来了,下面的logger.info中给出了前后执行的顺序次序,可以根据自己的需求进行修改,但是onApplicationEven...
  • zjcjava
  • zjcjava
  • 2017-12-08 14:18:31
  • 343

Spring拦截器执行了两次

Spring拦截器执行了两次 今天在调试代码的时候,发现有个拦截器被执行了两次,很是奇怪,开始以为是即配置了注解的方式,同时又配置了xml配置文件造成的问题,可是仔细检查后并没有配置注解,只配置了x...
  • wgw335363240
  • wgw335363240
  • 2012-07-26 16:05:08
  • 4776
收藏助手
不良信息举报
您举报文章:springBoot 中定时任务在linux中执行了两次
举报原因:
原因补充:

(最多只允许输入30个字)