最近,在实习的时候,搞一个关于备份数据库中的定时任务,但是,不知道为什么,它每个任务执行了两次。好家伙,直接困了我两天,差点直接提桶跑路。。。
就在今天,我灵机一动,因为我之前的话是将生成的war包放在Tomcat中运行的,这次我生成jar包运行试一下,居然,只执行了一次。通过查看日志,在定时任务中,整个定时任务同时执行了两次,时间相差 0.0001秒。
感谢网络,第一次试错,原来的项目的pom文件中,没有将SpringBoot-Web自带的Tomcat移除掉。。。。
移除它,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
接着,竟然还是一样,还是执行了两次定时任务。
第二次真正解决:
通过在Tomcat的conf目录server.xml文件下查看部署项目的
配置。原来,tomcat扫描了两次,第一次先是扫描了appBase=“webapps”,之后又去加载项目war包的绝对路径:
docBase="…/…war";我们可以将appBase置为空来解决.
<Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true">
<Context docBase="D:\java develop software\apache-tomcat-8.5.37\webapps\xf_platform_mobile" path="/" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>