一直在windows上开启,本地跑项目,未在Linux上玩过,最近搭建测试服务器,发现一个定时任务每次都是执行两次,甚是费解。本地没有这个现象。
然后开始了百度查资料之旅,有的说tomcat的配置有问题(https://blog.youkuaiyun.com/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.youkuaiyun.com/songhaifengshuaige/article/details/54138023
遂删除那个多余的类,再次测试,只启动了一次,定时任务也只执行一次。
如果有人了解的其深层原理,可以一起讨论交流下,希望各位大佬不吝赐教。