【SpringBoot笔记2】在应用启动时干点事儿

在使用SpringBoot搭建项目时,有时需要在项目启动时做一些事情,比如初始化数据库、加载配置文件等等。

SpringBoot为我们提供了以下几种方案供我们选择:

  • 实现ApplicationRunner接口或者实现CommandLineRunner接口
  • 利用Spring的事件机制

1 实现ApplicationRunner或CommandLineRunner接口

如果需要在Application启动的时候执行一些代码,可以通过实现SpringBoot提供的ApplicationRunnerCommandLineRunner接口来达到目的。

ApplicationRunnerCommandLineRunnerSpringApplication.run()结束之前,在所有的beans加载完成之后执行。用于执行一些初始化操作(如加载缓存、读取配置文件、创建线程池等)。

1.1 源码

这两个接口工作方式相同,都只提供一个run方法,源码如下:

ApplicationRunner 源码:

@FunctionalInterface
public interface ApplicationRunner {
   

	void run(ApplicationArguments args) throws Exception;
}

CommandLineRunner源码:

@FunctionalInterface
public interface CommandLineRunner {
   

	void run(String... args) throws Exception;
}

不同的是,ApplicationRunner通过ApplicationArguments接收启动参数,对原始参数进行了封装。CommandLineRunner 通过String数组接收启动参数,保留原始参数。

1.2 使用方式

我们可以通过实现这两个接口之一,并使用@Component注解将实现类注册为bean

/**
 * Application启动时进行一些初始化
 */
@Component
public class AppInit implements ApplicationRunner {
   

    @Override
    public void run(ApplicationArguments args) throws Exception {
   
        System.out.println("进行一些初始化操作...");
    }
}

还可以通过@Order注解或者实现Ordered接口来指定多个初始化类中run方法的调用顺序。数值越小,优选级越高。

/**
 * Application启动时进行一些初始化
 */
@Component
@Order(1)
public class AppInit1 implements ApplicationRunner {
   

    @Override
    public void run(ApplicationArguments args) throws Exception {
   
        System.out.println("order = 1, 进行一些初始化操作...");
    }
}
/**
 * Application启动时进行一些初始化
 */
@Component
@Order(2)
public class AppInit2 implements CommandLineRunner {
   

    @Override
    public void run(String..
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值