Spring项目启动初始化 CommandLineRunner 与 @PostConstruct

在使用SpringBoot构建项目时,我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner。
CommandLineRunner是一个接口,我们需要时,只需实现该接口就行。如果存在多个加载的数据,我们也可以使用@Order注解来排序。
案例:
分别定义了一个数据加载类MyStartupRunner1,排序为2;以及另一个数据加载类MyStartupRunner2,排序为1

@Component
@Order(value = 2)
public class MyStartupRunner1 implements CommandLineRunner{
@Override
public void run(String... strings) throws Exception {
    System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 MyStartupRunner1 order 2 <<<<<<<<<<<<<");
    }
}

@Component
@Order(value = 1)
public class MyStartupRunner2 implements CommandLineRunner {
@Override
public void run(String... strings) throws Exception {
    System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 MyStartupRunner2 order 1 <<<<<<<<<<<<<");
    }
}
@Slf4j
@Component
public class SystemCommandLineRunner implements CommandLineRunner {

    @Resource
    private SysConfigService sysConfigService;

    @Resource
    private WarnKeywordService warnKeywordService;

    @Resource
    private SpringTaskService springTaskService;

    @Override
    public void run(String... strings) throws Exception {
        //初始化系统配置
        initSystemConfig();
        //初始化敏感词
        initWarnKeyword();
        //初始化定时器
        initTask();
    }

    private void initWarnKeyword() {
        warnKeywordService.initWarnKeyword();
        log.info("---------------初始化敏感词成功!-------------------");
    }

    private void initSystemConfig() {
        sysConfigService.initSysConfig();
        log.info("---------------初始化系统内存成功!-------------------");
    }

    private void initTask() {
        springTaskService.initTask();
        log.info("---------------初始化定时器成功!-------------------");
    }
}

这里可以控制初始化的执行顺序,在另外一个注解中
@PostConstruct

PostConstruct 和 CommandLineRunner 执行顺序,
PostConstruct 比 CommandLineRunner 要执行快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值