springboot在Linux下定时任务执行两次

    一直在windows上开启,本地跑项目,未在Linux上玩过,最近搭建测试服务器,发现一个定时任务每次都是执行两次,甚是费解。本地没有这个现象。

    然后开始了百度查资料之旅,有的说tomcat的配置有问题(https://blog.csdn.net/yaobengen/article/details/70312663点击打开链接),按照步骤修改之后依然无用,然后看到有人说是springboot启动了两次,然后去重启项目,果然发现是springboot启动了两次,分析可能是内置的tomcat没有移除导致的,然后去掉内置的tomcat,启动项目,还是启动两次???很是奇怪,继续分析,本项目除了启动类还有一个初始化的类,如下:

 
 
public class SpringBootStartApplication extends SpringBootServletInitializer {
    public SpringBootStartApplication() {
    }

    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(new Class[]{Application.class});
    }
}
然后发现启动类也继承了这个

SpringBootServletInitializer

public class Application extends SpringBootServletInitializer
原因找到:应该是继承了两次导致springboot加载了两次配置文件,启动了两次,具体
SpringBootServletInitializer的介绍看一个大神的博客:https://blog.csdn.net/songhaifengshuaige/article/details/54138023

遂删除那个多余的类,再次测试,只启动了一次,定时任务也只执行一次。

如果有人了解的其深层原理,可以一起讨论交流下,希望各位大佬不吝赐教。

猜你喜欢

转载自blog.csdn.net/qq_35651901/article/details/80207742