springboot 中的commandLineRunners接口
首先看实现了两个接口运行的顺序结果:

My1:
package com.example.commandlinerunner; import lombok.extern.java.Log;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.core.annotation.OrderUtils;
import org.springframework.stereotype.Component; import java.util.Arrays; /**
* Created by WangYx on 2017/9/14.
*/
@Component
@Order(6)
@Log
public class MyCmdLinerRunner1 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
log.info("MyCmdLinerRunner1:order = " + OrderUtils.getOrder(this.getClass())+" :args = "
+ Arrays.toString(args));
} private String getStacks(){
StringBuilder sb = new StringBuilder();
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
sb.append("=============\n"); for (int i = 0 ; i < elements.length ; i++){
sb.append(elements[i]).append("\n");
}
return sb.toString();
}
} My2:
package com.example.commandlinerunner; import lombok.extern.java.Log;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.core.annotation.OrderUtils;
import org.springframework.stereotype.Component; import java.util.Arrays; /**
* Created by WangYx on 2017/9/14.
*/
@Component
@Order(5)
@Log
public class MyCmdLinerRunner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
log.info("MyCmdLinerRunner2:order = " + OrderUtils.getOrder(this.getClass())+" :args = "
+ Arrays.toString(args));
} } 主函数:
package com.example.commandlinerunner;
/**
* 通过CommandLineRunner,可在所有Spring Bean和 ApplicationContext被创建后执行一些可以访问命令行参数的任务。
* 如想指定多个CommandLineRunnerBean的执行顺序,
* 可以实现org.springframework.core.Ordered接口
* 或添加org.springframework.core.annotation.Order注解
*/ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class CommandlinerunnerApplication { public static void main(String[] args) {
SpringApplication.run(CommandlinerunnerApplication.class, args);
}
} /**
* org.springframework.core.annotation.AnnotationAwareOrderComparator负责对CommandLineRunnerBean进行排序。排序规则为:
如果有一方是org.springframework.core.PriorityOrdered接口实现,而另一方不是,则PriorityOrdered接口实现一方获胜;
检查org.springframework.core.Ordered接口或 org.springframework.core.annotation.Order 注解获得order,值小者胜;
其他没有order的则置为Ordered.LOWEST_PRECEDENCE,顺序不定。
在上述测试中,MyCmdLineRunner2的order为5,MyCmdLineRunner1的order为6,因此MyCmdLineRunner2在MyCmdLineRunner1之前执行。
Application的demo1和demo2方法设置了@order注解,但是调试可知lamda表达式生成类并没有@order注解信息,因此执行顺序排在后面。
这是需要注意的地方。此外,Bean初始化顺序跟CommandLineRunner执行顺序也没有关系。
*/
springboot 中的commandLineRunners接口的更多相关文章
- Springboot中整合knife4j接口文档
在项目开发过程中,web项目的前后端分离开发,APP开发,需要由前端后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发. 什么是knife4j 简单说knife4j就swagge ...
- spring扩展点之四:Spring Aware容器感知技术,BeanNameAware和BeanFactoryAware接口,springboot中的EnvironmentAware
aware:英 [əˈweə(r)] 美 [əˈwer] adj.意识到的;知道的;觉察到的 XXXAware在spring里表示对XXX感知,实现XXXAware接口,并通过实现对应的set-XXX ...
- SpringBoot中如何灵活的实现接口数据的加解密功能?
数据是企业的第四张名片,企业级开发中少不了数据的加密传输,所以本文介绍下SpringBoot中接口数据加密.解密的方式. 本文目录 一.加密方案介绍二.实现原理三.实战四.测试五.踩到的坑 一.加密方 ...
- springBoot中使用使用junit测试文件上传,以及文件下载接口编写
本篇文章将介绍如何使junit在springBoot中测试文件的上传,首先先阅读如何在springBoot中进行接口测试. 文件上传操作测试代码 import org.junit.Before; im ...
- 如何让接口文档自动生成,SpringBoot中Swagger的使用
目录 一.在SpringBoot项目中配置Swagger2 1.pom.xml中对Swagger2的依赖 2.编写配置类启用Swagger 3.配置实体类的文档 4.配置接口的文档 5.访问文档 二. ...
- SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端
笔者的JSON如下: { "code": 10001, "message": "成功", "nextUrl": null ...
- springboot中swaggerUI的使用
demo地址:demo-swagger-springboot springboot中swaggerUI的使用 1.pom文件中添加swagger依赖 2.从github项目中下载swaggerUI 然 ...
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- springboot中HandlerMethodArgumentResolver的使用
springboot项目中在所有的controller方法中想增加token验证,即所有的方法都必须登陆有token之后才能访问.springboot封装了SpringMVC中的HandlerMeth ...
随机推荐
- oracle连接数据库和连接表的操作
1.连接测试是否连接oracle成功 (1).tnsnames.ora文件配置 oracle65= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCO ...
- 若依项目利用nginx实现负载均衡及保持会话
记录一下若依项目利用nginx实现负载均衡及保持会话的步骤. 此次作为试验性的测试,为了方便在本地window的环境上实现. 具体步骤: 1.安装两个tomcat8,可以下载一个后,另一个复制即可,下 ...
- Jumpserver跳板机的搭建和部署
1.需要搭云yum仓库wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 2. ...
- day32-python阶段性复习六
面向对象编程的一种方法一些皆对象面向过程和面向对象编程面向过程编程:函数式编程.c等面向对象编程:c++ ,java,python等看具体问题用哪种方法 类和对象:是面向对象中的两个重要的概念类:是对 ...
- Java数组声明、初始化
维数组的声明方式:type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 ...
- linux 安装【jdk、tomcat】查看对外开放端口(防火墙拦截处理)
1.安装 jdkhttps://www.cnblogs.com/xu-dong/p/6422938.html 查看Linux下查看JDK安装路径: https://www.cnblogs.com/im ...
- ajax中的一些参数的含义及用法
jquery中的ajax方法参数总结: 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get) ...
- 学习Java的第一天
登录http://www.oracle.com,下载JDK(J2SE)JDK 1.0,1.1,1.2,1.3,1.4 1.5 (JDK5.0) 支持注解.支持泛型 1.6(JDK6.0) Servel ...
- 深入path类
Path类放在System.IO命名空间里.Path是一个只包含有静态方法的实例类,所以它不需要在使用之前实例化.它有各种方法用于处理文件的扩展名.文件名.根路径,以及和更多和路径相关的方面.下面就是 ...
- 过滤函数 filter
filter(lambda x:x.endswith('居'),house_type_list) 过滤函数,作用就是将“以‘居’结尾的字段都过滤出来,其它的字段都删除掉.”