springboot启动时执行任务CommandLineRunner - JustTheWayIAm - 博客园

# SpringBoot中CommandLineRunner的作用
> 平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的代码放在实现的run方法中
# 简单例子

package org.springboot.sample.runner;  
import org.springframework.boot.CommandLineRunner;  
import org.springframework.stereotype.Component;

@Component  
public class MyStartupRunner implements CommandLineRunner {

@Override  
public void run(String... args) throws Exception {  
System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作<<<<<<<<<<<<<");  
}

}  

# 如果有多个类实现CommandLineRunner接口,如何保证顺序
> SpringBoot在项目启动后会遍历所有实现CommandLineRunner的实体类并执行run方法,如果需要按照一定的顺序去执行,那么就需要在实体类上使用一个@Order注解(或者实现Order接口)来表明顺序

package org.springboot.sample.runner;

import org.springframework.boot.CommandLineRunner;  
import org.springframework.core.annotation.Order;  
import org.springframework.stereotype.Component;

  
@Component  
@Order(value=2)  
public class MyStartupRunner1 implements CommandLineRunner {

@Override  
public void run(String... args) throws Exception {  
System.out.println(">>>>>>>>>>>>>>>服务启动执行 2222 <<<<<<<<<<<<<");  
}

}  
package org.springboot.sample.runner;

import org.springframework.boot.CommandLineRunner;  
import org.springframework.core.annotation.Order;  
import org.springframework.stereotype.Component;

@Component  
@Order(value=1)  
public class MyStartupRunner2 implements CommandLineRunner {

@Override  
public void run(String... args) throws Exception {  
System.out.println(">>>>>>>>>>>>>>>服务启动执行 111111 <<<<<<<<<<<<<");  
}

}  

> 控制台显示

>>>>>>>>>>>>>>>服务启动执行 11111111 <<<<<<<<<<<<<  
>>>>>>>>>>>>>>>服务启动执行 22222222## 标题 ## <<<<<<<<<<<<<  

> 根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序。


Original url: Access
Created at: 2019-08-26 15:25:55
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论