Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。

这个神器就是 CommandLineRunnerCommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作。

接下来我们就运用案例测试它如何使用,在测试之前在启动类加两行打印提示,方便我们识别 CommandLineRunner 的执行时机。

@SpringBootApplicationpublic classCommandLineRunnerApplication {public static voidmain(String[] args) {System.out.println("The service to start.");SpringApplication.run(CommandLineRunnerApplication.class, args);System.out.println("The service has started.");}
}

接下来我们直接创建一个类继承 CommandLineRunner ,并实现它的 run() 方法。

@Componentpublic class Runner implementsCommandLineRunner {@Overridepublic void run(String... args) throwsException {System.out.println("The Runner start to initialize ...");}
}

我们在 run() 方法中打印了一些参数来看出它的执行时机。完成之后启动项目进行测试:

...
The service to start..   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.0.0.RELEASE)
...2018-04-21 22:21:34.706  INFO 27016 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-04-21 22:21:34.710  INFO 27016 --- [           main] com.neo.CommandLineRunnerApplication     : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)
The Runner start to initialize ...
The service has started.

根据控制台的打印信息我们可以看出 CommandLineRunner 中的方法会在 Spring Boot 容器加载之后执行,执行完成后项目启动完成。

如果我们在启动容器的时候需要初始化很多资源,并且初始化资源相互之间有序,那如何保证不同的 CommandLineRunner的执行顺序呢?Spring Boot 也给出了解决方案。那就是使用 @Order 注解。

我们创建两个 CommandLineRunner 的实现类来进行测试:

第一个实现类:

@Component
@Order(1)public class OrderRunner1 implementsCommandLineRunner {@Overridepublic void run(String... args) throwsException {System.out.println("The OrderRunner1 start to initialize ...");}
}

第二个实现类:

@Component
@Order(2)public class OrderRunner2 implementsCommandLineRunner {@Overridepublic void run(String... args) throwsException {System.out.println("The OrderRunner2 start to initialize ...");}
}

添加完成之后重新启动,观察执行顺序:

...
The service to start..   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.0.0.RELEASE)
...2018-04-21 22:21:34.706  INFO 27016 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-04-21 22:21:34.710  INFO 27016 --- [           main] com.neo.CommandLineRunnerApplication     : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)
The OrderRunner1 start to initialize ...
The OrderRunner2 start to initialize ...
The Runner start to initialize ...
The service has started.

通过控制台的输出我们发现,添加 @Order 注解的实现类最先执行,并且@Order()里面的值越小启动越早。

在实践中,使用ApplicationRunner也可以达到相同的目的,两着差别不大。看来使用 Spring Boot 解决初始化资源的问题非常简单。

转载于:https://www.cnblogs.com/lizm166/p/10272882.html

Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源相关推荐

  1. Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...

  2. (转)Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求, ...

  3. java 项目启动初始化_Spring Boot解决项目启动时初始化资源的方法

    前言 在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初 ...

  4. Spring Boot 5:应用程序启动时初始化资源

    需求:应用程序启动后,初始化基础数据.加密证书等操作. 可以使用CommandLineRunner接口来实现,在SpringBoot.run()之后完成资源的初始化工作. 注意:多个Runner需要顺 ...

  5. 项目启动时socket自动启动_spring boot 项目在启动时调用接口

    1.环境 目前开发的项目使用的spring boot(2.1.4.RELEASE)+ssm 2. 需求 现在有一个数据处理任务的接口,在spring boot项目启动后,可以手动的去启动任务,但是这样 ...

  6. spring定时任务需要在项目启动时执行一次

    spring定时任务需要在项目启动时执行一次,然后再按照指定规则执行 在定时任务方法上加注解@PostConstruct,不是spring提供的注解,是JAVA原生注解,在初始化servlet之前执行 ...

  7. Spring 项目启动时,打印每个bean加载时间

    用于解决项目启动慢的问题 定位项目启动加载哪些Bean慢的原因 @Component public class LoggerBeanLoadCostPostProcessor implements B ...

  8. 解决ArcMap启动时只停留在初始化界面的方法

    解决ArcMap启动时只停留在初始化界面的方法 参考文章: (1)解决ArcMap启动时只停留在初始化界面的方法 (2)https://www.cnblogs.com/luwl/p/6899342.h ...

  9. 解决Tomact启动时问题 Port 8080 required by Tomcat v8.0 Server at localhost is already in use.

    解决Tomact启动时问题 Port 8080 required by Tomcat v8.0 Server at localhost is already in use. 参考文章: (1)解决To ...

最新文章

  1. Laravel 中简约而不简单的 Macroable 宏指令
  2. httpclient get post
  3. 字典、列表、元祖、字符串的综合(1)
  4. URL跟Url的区别
  5. 《软件工程》 教 学 大 纲
  6. 5月7日MySQL 学习
  7. 中公教育python培训讲师面试题_中公教育面试经验
  8. CSDN社区排名出炉了,来看看你的排名是多少?
  9. 二维码 PDF417
  10. flutter web实现微信网页授权登录
  11. 学习笔记(1):Echarts+Asp.Net+Sql Server报表开发视频教程-折线图和曲线图
  12. (混沌序列统计特性)Maurer通用统计测试---matlab
  13. 地理信息系统实习作业——利用ArcGis计算武汉市分区土地利用类型面积
  14. team viewer如何解绑设备
  15. scatter python cmap_Matplotlib.pyplot.scatter()中颜色映射cmap的可能取值
  16. vivo智能手机产能
  17. Linux系统磁盘大小比raid小,挂载磁盘阵列柜后,显示的大小比实际小1TB
  18. portraiture中文版下载切换教程v3.5.6版本
  19. 直流无刷电机极对数图解(simulink)
  20. 选择哪种护眼灯对眼睛好?盘点五款护眼台灯

热门文章

  1. C#获取二叉树深度及分层遍历二叉树
  2. tomcat中关于websocket的性能优化配置
  3. Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案
  4. easyUI创建人员树
  5. 关于项目管理的一些想法
  6. php Imagick()扩展,实现将原图截取成不同规格尺寸的图片
  7. ORA-00054 资源正忙,但指定以NOWAIT 方式获取资源,或者超时失效
  8. Android 开发之多线程处理、Handler 详解
  9. 'SVN更新' has encountered a problem :An internal error occurred during: svn错误
  10. CSV适用于表格式数据, Json适用于接口和配置文件