从零搭建自己的SpringBoot后台框架(十八)

释放双眼,带上耳机,听听看~!

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如读取配置文件信息,数据库连接,清除缓存信息等。在Spring Boot中给我们提供了两个接口来帮助我们实现这样的需求。这两个接口就是我们今天要讲的CommandLineRunnerApplicationRunner,他们的执行时机为容器启动完成的时候。

一:共同点和区别

共同点:其一执行时机都是在容器启动完成的时候进行执行;其二这两个接口中都有一个run()方法;  

不同点:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。

二:使用ApplicationRunner来完成需求

创建core→startuprunner→StartupRunner1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1package com.example.demo.core.startuprunner;
2
3import org.slf4j.Logger;
4import org.slf4j.LoggerFactory;
5import org.springframework.boot.ApplicationArguments;
6import org.springframework.boot.ApplicationRunner;
7import org.springframework.core.annotation.Order;
8import org.springframework.stereotype.Component;
9
10@Component
11@Order(value = 1)
12public class StartupRunner1 implements ApplicationRunner {
13
14    private static final Logger logger = LoggerFactory.getLogger(StartupRunner1.class);
15
16    @Override
17    public void run(ApplicationArguments var1) throws Exception{
18        logger.info("服务器启动成功!<<<<使用ApplicationRunner接口");
19    }
20}
21

注意:需要添加@Component,不然SpringBoot扫描不到这个类,不会执行。

启动服务器,我们可以看见

 

三:使用CommandLineRunner来完成需求

创建core→startuprunner→StartupRunner2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1package com.example.demo.core.startuprunner;
2
3import org.slf4j.Logger;
4import org.slf4j.LoggerFactory;
5import org.springframework.boot.CommandLineRunner;
6import org.springframework.core.annotation.Order;
7import org.springframework.stereotype.Component;
8
9@Component
10@Order(value = -1)
11public class StartupRunner2 implements CommandLineRunner {
12
13    private static final Logger logger = LoggerFactory.getLogger(StartupRunner2.class);
14
15    @Override
16    public void run(String... args) throws Exception{
17        logger.info("服务器启动成功!<<<<使用CommandLineRunner接口");
18    }
19}
20
21

 

我们可以看见已经输出成功,并且CommandLineRunner  在  ApplicationRunner  先执行

四:使用Order注解修改执行顺序

如果有多个实现类,而我们需要按照一定的顺序执行的话,那应该怎么办

解决方案:在实现类上加上@Order注解指定执行的顺序

需要注意:数字越小,优先级越高,也就是@Order(1)注解的类会在@Order(2)注解的类之前执行。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ lambda表达式

2022-1-11 12:36:11

安全技术

vmstat命令

2021-8-18 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索