Springboot项目启动执行特定方法

Springboot项目启动执行特定方法

Springboot给我们提供了两种“开机启动”方式:ApplicationRunner和CommandLineRunner。

这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner,来实现,他们都是在SpringApplication 执行之后开始执行的。

CommandLineRunner接口可以用来接收字符串数组的命令行参数,ApplicationRunner 是使用ApplicationArguments 用来接收参数的。

一、使用 CommandLineRunner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package cn.pconline.common.command;

import cn.pconline.common.constant.CommonConstant;
import cn.pconline.common.redis.client.RedisClient;
import cn.pconline.entity.Coupon;
import lombok.extern.slf4j.Slf4j;
import org.gelivable.dao.GeliDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;


/**
* @Description 项目启动执行
* @Author jie.zhao
* @Date 2019/9/5 11:08
*/
@Slf4j
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Autowired
private GeliDao geliDao;

@Autowired
private RedisClient redisClient;

@Override
public void run(String... var1) throws Exception {
log.info("This will be execute when the project was started!");
//优惠卷初始化
List<Coupon> couponList = geliDao.list(Coupon.class, "SELECT * FROM bjdev190812_coupon");
couponList.forEach(coupon -> {
redisClient.string().set(CommonConstant.COUPON_LIST + coupon.getId(), coupon.getCouponNum());
});
//处理业务
}
}

二、使用 ApplicationRunner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package cn.pconline.common.command;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* @Description 项目启动执行
* @Author jie.zhao
* @Date 2019/9/5 16:37
*/
@Slf4j
@Component
public class MyApplicationRunner implements ApplicationRunner {

@Override
public void run(ApplicationArguments var1) throws Exception{
log.info("MyApplicationRunner class will be execute when the project was started!");
//处理业务
}
}

三、项目启动测试

1
2
3
2019-09-05 16:39:27.133  INFO 47936 --- [       resin-40] cn.pconline.GeliSpringbootApplication    : Started GeliSpringbootApplication in 15.141 seconds (JVM running for 26.088)
2019-09-05 16:39:25.145 INFO 47936 --- [ resin-40] c.p.common.command.MyApplicationRunner : MyApplicationRunner class will be execute when the project was started!
2019-09-05 16:39:27.145 INFO 47936 --- [ resin-40] c.p.common.command.MyCommandLineRunner : This will be execute when the project was started!

这两种方式的实现都很简单,直接实现了相应的接口就可以了。

记得在类上加@Component注解。

四、指定启动方法执行的顺序

如果想要指定启动方法执行的顺序,可以通过实现org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解来实现。

以ApplicationRunner 为例来分别实现。

1、Ordered接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
Component
public class MyApplicationRunner implements ApplicationRunner,Ordered{

@Override
public int getOrder(){
return 1;//通过设置这里的数字来知道指定顺序
}

@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}
}
2、Order注解实现方式:
1
2
3
4
5
6
7
8
9
10
@Component
@Order(value = 1)
public class MyApplicationRunner implements ApplicationRunner{

@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}

}

参考文档:

https://www.jianshu.com/p/fa2783cee2a7

-------------已经触及底线 感谢您的阅读-------------

本文标题:Springboot项目启动执行特定方法

文章作者:趙小傑~~

发布时间:2019年09月05日 - 16:44:01

最后更新:2019年09月06日 - 21:53:41

原始链接:https://cnsyear.com/posts/453f6638.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%