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 ...
随机推荐
- CSS中的盒子模型与 box-sizing 属性
盒子模型是css中一个重要的概念,是开发网页必须要用的布局方法.盒子模型有两种,分别是标准 w3c 盒子模型和 ie 盒子模型. 标准 w3c 盒子模型:包括 magin(外边距).border(边框 ...
- mac 不小心把管理员改成了普通用户
最近手贱,不小心把mbp仅有的管理员账号设置成了普通用户,想重新改回管理员,竟然需要用其他管理员账号去更改.简直 那个 啥 ~ 下面将提供创建一个新的管理员账号的方案 不仅适用于上述我出现的问题,也适 ...
- .net asp 实现json 格式跨域访问 的方法
在<configuration> 配置目录下添加允许跨域的头部信息 //webapi 默认的web.config有配置 //1)删除 下面参数 否者WEB API 会 出现405 错误 没 ...
- 【OS】Heap & Stack
操作系统概念的堆.栈不同于数据结构的堆.栈. C 语言中,一切指针占 4 字节,这意味着指针指向 RAM 中的地址可以有 232 个,最小的地址是 0,最大的地址是 231 - 1. (一)堆: 堆空 ...
- .NET实现IoC
.NET里简易实现IoC 前言 在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...
- golang 缺少逗号报错问题
一个逗号引发的语法报错问题:syntax error: unexpected newline, expecting comma or }或者missing ',' before newline in ...
- Spring 源码学习(4)—— bean的加载part 1
前面随笔中,结束了对配置文件的解析工作,以及将配置文件转换成对应的BeanDefinition存储在容器中.接下来就该进行bean的加载了. public Object getBean(String ...
- Hadoop学习笔记05_HA
################# HA 即 High Available 高可用.# 其作用是为了减少主从结构的单点故障,而设置备用节点,既然学习了Hadoop生态圈,那么HA配置也是必须要掌握的. ...
- 结对项目——黄金分割点游戏(陈香宇&蔡春燕)
结对项目名称:黄金分割点游戏(单机) 运行环境:vs 编译语言:c语言 项目分析: 实现的功能:用户可以选择继续游戏并且可以保存之前获得的分数,但是为了游戏的公平性,游戏的参数人数一开始用户确定以后就 ...
- Windows 应用商店无法下载---启动更新
今天想在应用商店下载东西,但是以直没成功,查看原因结果是因为我的Windows自动更新关了. 百度,如何打开自动更新,要打开本地组策略编辑器,但是我是Windows家庭版,,,没有这个东西,, 最后, ...