SpringBoot项目启动之后执行特定逻辑

一、前言介绍

在日常工作当中,我们需要在项目启动之后执行某些特定的逻辑,比如说缓存预热.、特定数据的初始化操作等

二、SpringBoot的实现方式

1.@PostConstruct

@PostConstruct是其对应Bean装载完之后执行指定操作,不是项目启动之后,这里不做多余介绍

@Component
public class PostBean {

    @PostConstruct
    public void init(){
        System.out.println("@PostConstruct定制化逻辑..");
    }
}

2.实现CommandLineRunner接口

CommandLineRunner 是Spring Boot提供的一个接口,当你实现该接口并将之注入Spring IOC容器后,Spring Boot应用启动后就会执行其run方法。一个Spring Boot可以存在多个CommandLineRunner的实现,当存在多个时,你可以实现Ordered接口控制这些实现的执行顺序(Order 数值越大优先级越低)。接下来我们来声明两个实现并指定顺序:

@Component
public class MaxOrderCommandLineRunner implements CommandLineRunner, Ordered {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("加载特定逻辑。。。Ordered->max");
    }

    @Override
    public int getOrder() {
        return Integer.MAX_VALUE;
    }
}
@Component
public class MinOrderCommandLineRunner implements CommandLineRunner, Ordered {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("加载特定逻辑。。。Ordered->min");
    }

    @Override
    public int getOrder() {
        return Integer.MIN_VALUE;
    }
}

在这里插入图片描述

3.实现ApplicationRunner接口

在Spring Boot 1.3.0又引入了一个和CommandLineRunner功能一样的接口ApplicationRunner。CommandLineRunner接收可变参数String… args,而ApplicationRunner 接收一个封装好的对象参数ApplicationArguments。除此之外它们功能完全一样,甚至连方法名都一样。声明一个ApplicationRunner并让它优先级最低:

@Component
public class MyApplicationRunner implements ApplicationRunner, Ordered {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("实现ApplicationRunner,加载特定逻辑。。。");
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

4.实现ApplicationListener接口

ApplicationListener是Spring的事件机制,典型的观察者模式。实现接口ApplicationListener方式和实现ApplicationRunner,CommandLineRunner接口都不影响服务,都可以正常提供服务

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {
    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        System.out.println(event.getClass());
        System.out.println("实现ApplicationListener,加载特定逻辑。。。");
    }
}

5.实现SpringApplicationRunListener接口

和ApplicationListener类似

public class MySpringApplicationRunListener implements SpringApplicationRunListener, Ordered {

    public MySpringApplicationRunListener(SpringApplication application, String[] args) {
    }

    @Override
    public void ready(ConfigurableApplicationContext context, Duration timeTaken) {
        SpringApplicationRunListener.super.ready(context, timeTaken);
        // 这里可以定制化逻辑
    }


    @Override
    public int getOrder() {
        return Integer.MAX_VALUE;
    }
}

src/main/resources/META-INF/spring.factories装备侦听器

org.springframework.boot.SpringApplicationRunListener=com.xmc.after.MySpringApplicationRunListener
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值