《回顾》
上一篇,说了Swagger-UI和自定义日志,从现在开始,以后的演示项目,都这样用了。
本篇,说下定时任务,说下怎么把SpringBoot项目编译成War包的形式运行。是的,我们堂堂程序员不仅有双肩包,还有Jar包,War包。
一、定时任务
不知道你是否还在使用代码一坨又一坨的XML来配置定时任务?如果是,那这一篇你不能放过。
定时任务,属于SpringBoot自带的功能,在spring-boot-starter-web 中,所以无需额外添加依赖。
具体一些,它在spring-context 包中,依赖关系了解下。
1、启用定时任务
@SpringBootApplication
@EnableScheduling // 开启定时任务
public class Springbootz06Application {
中间那行
2、编写定时任务工作类
@Component
public class DemoJob {
private Logger log = LoggerFactory.getLogger(getClass());
// 自本次开始,每10秒执行一次
@Scheduled(fixedRate = 10000)
public void fixedRate() {
log.info(" ** fixedRate,运行..{} ",new Date());
}
// 自本次结束,每10秒执行一次
@Scheduled(fixedDelay = 10000)
public void fixedDelay() {
log.info(" ** fixedDelay,运行..{} ",new Date());
}
// 第一次延迟1秒执行,当执行完后每2秒再执行
@Scheduled(initialDelay = 1000, fixedDelay = 2000)
public void delay() {
log.info(" ** delay,运行..{}", new Date());
}
//每天10点54分00秒时执行
@Scheduled(cron = "00 38 20 * * ?")
public void cron() {
log.info(" ** cron,运行..{}", new Date());
}
}
首先,注意下@Component 。它表示,这个类就交给Spring请管理了。
定时任务相关注解说明:
@Scheduled 将当前方法注解为定时任务,它包含以下参数:
cron:crontab表达式(用的最多的一个)。
* * * * * * :分别对应,秒、分、时、日、月、年
0 0 10,14,16 * * ? :每天上午10点,下午2点,4点 ,逗号之间连接起来算一个
0 0 12 * * ? :每天中午12点触发
0 0/5 0 * * ? :每5分钟执行一次
fixedRate:上一次 启动时间点之后X秒执行一次,单位毫秒
fixedDelay:上一次 结束时间点之后每X秒执行一次,单位毫秒
initialDelay:第一次延迟X秒执行,之后按照fixedRate的规则每X秒执行,单位毫秒
-
@Scheduled(fixedRate = 10000) :自上一次开始执行时间点,之后每10秒执行一次
-
@Scheduled(fixedDelay = 10000) :自上一次执行完毕时间点,之后每10秒执行一次
-
@Scheduled(initialDelay = 1000, fixedDelay = 2000) :第一次延迟1秒后执行,之后按fixedDelay的规则每2秒执行一次
-
@Scheduled(cron = "00 55 22 * * ?") :按照crontab表达式规则,执行一次。22点55分执行一次。
启动应用,查看运行效果:
定时任务就这些,你可以尽管放心的把它运行于线上。
二、打War包
在生产环境中,用Jar包的形式运行应用,有点不太妥当。Tomcat优化不那么方便,单个class处理也不那么方便,如果涉及到前端代码,那就有更多的不方便。
所以,还是用War包吧。
1、修改启动类 *Application.java
继承 SpringBootServletInitializer,
重写 configure() 方法
代码如下:
@SpringBootApplication
@EnableScheduling // 开启定时任务
public class Springbootz06Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Springbootz06Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Springbootz06Application.class, args);
}
}
2、修改 pom.xml
添加:
<packaging>war</packaging>
如果,pom中已经存在packaging,值是jar,修改成war即可。
如下代码:
<groupId>com.zhou</groupId>
<artifactId>springbootz06</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootz06</name>
<description>springboot2.1.1 定时任务,打War包</description>
<packaging>war</packaging>
最后那行
3、排除掉tomcat依赖
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
4、打包
此处的打包方式和Jar包那片的步骤完全一致,我就不细细重复了。
将War包修改成自己想要的名字后,放入tomcat运行即可。
查看运行日志:
请注意你的环境变量或者Tomcat配置的JDK环境变量版本。本项目使用JDK11编译。
今天就到这吧。
博客内所有文章,每周从公众号同步一次。
文章源码均可从公众号获取。
如果您可以关注下,那就好了。