热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot系列18:CommandLineRunner解决项目启动时初始化资源

     项目过程中会遇到需要做一些初始化操作,如线程池初始化、加载初始化参数等,同时可能需要有不同的加载顺序的要求。今天介绍在springboot工程下如何解决项目

         项目过程中会遇到需要做一些初始化操作,如线程池初始化、加载初始化参数等,同时可能需要有不同的加载顺序的要求。今天介绍在springboot工程下如何解决项目启动时初始化资源的问题。

 

启动类:

/**
*
* @version 1.0
* @description: 启动类
* @date 2020-09-14 19:41
*/
@SpringBootApplication
public class CommandLineRunnerApplication {
public static void main(String[] args) {
System.out.println("The service to start");
SpringApplication.run(CommandLineRunnerApplication.class, args);
System.out.println("The service has started");
}
}

 

项目启动初始化参数,可实现CommandLineRunner 接口类,实现 run() 方法。

/**
*
* @version 1.0
* @description: 实现CommandLineRunner接口的初始化类
* @date 2020-09-14 19:43
*/
@Component
public class Runner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("The Runner start to initialize");
}
}

 

运行项目的启动类,运行结果如下:

 

 

 

下面实现按照顺序类初始化参数的方法,通过 @Order 注解来控制执行顺序。

/**
*
* @version 1.0
* @description: 第一个启动初始化参数类
* @date 2020-09-14 19:44
*/
@Component
@Order(1)
public class FirstRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("The FirstRunner start to initialize");
}
}

 

/**
* @version 1.0
* @description: 第二个启动初始化参数类
* @date 2020-09-14 19:44
*/
@Component
@Order(2)
public class SecondRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("The SecondRunner start to initialize");
}
}

 

启动工程的启动类,执行结果顺序如下图:

The service to start
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.7.RELEASE)
2020-09-14 20:09:52.427 INFO 9184 --- [ main] t.z.blog.CommandLineRunnerApplication : Starting CommandLineRunnerApplication on zhangliang with PID 9184 (E:\weixinworkspace\springboot-parent\springboot-init\target\classes started by Administrator in E:\weixinworkspace\springboot-parent)
2020-09-14 20:09:52.430 INFO 9184 --- [ main] t.z.blog.CommandLineRunnerApplication : No active profile set, falling back to default profiles: default
2020-09-14 20:09:53.420 ERROR 9184 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.27] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-09-14 20:09:53.719 ERROR 9184 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.27] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-09-14 20:09:53.808 INFO 9184 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2020-09-14 20:09:53.826 ERROR 9184 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.27] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-09-14 20:09:53.841 INFO 9184 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-09-14 20:09:53.841 INFO 9184 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.22]
2020-09-14 20:09:53.950 INFO 9184 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-09-14 20:09:53.950 INFO 9184 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1451 ms
2020-09-14 20:09:54.162 INFO 9184 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-09-14 20:09:54.383 INFO 9184 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-09-14 20:09:54.387 INFO 9184 --- [ main] t.z.blog.CommandLineRunnerApplication : Started CommandLineRunnerApplication in 2.303 seconds (JVM running for 2.666)
The FirstRunner start to initialize
The SecondRunner start to initialize
The Runner start to initialize
The service has started

 实现 CommandLineRunner 接口中的 run() 方法,同时 @Order 注解的实现类最先执行,并且@Order()里面的值越小启动越早。

 



推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 本文详细介绍了PHPStorm在Mac和Windows系统下的快捷键使用技巧,帮助开发者提高编程效率。 ... [详细]
  • 本文详细介绍了如何在VSCode中正确配置Python环境,包括通过不同方式安装Python以及如何安装和配置Python插件,确保开发环境顺利搭建。 ... [详细]
  • C# 中创建和执行存储过程的方法
    本文详细介绍了如何使用 C# 创建和调用 SQL Server 存储过程,包括连接数据库、定义命令类型、设置参数等步骤。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文旨在探讨设计模式在Visual FoxPro (VFP) 中的应用可能性。虽然VFP作为一种支持面向对象编程(xbase语言)的工具,其OO特性相对简明,缺乏高级语言如Java、C++等提供的复杂特性,但设计模式作为一种通用的解决方案框架,是否能有效应用于VFP,值得深入研究。 ... [详细]
  • 本文介绍如何通过参数化查询来防止SQL注入攻击,确保数据库的安全性。示例代码展示了在C#中使用参数化查询添加学生信息的方法。 ... [详细]
  • 环境变量是用于描述系统运行环境的一系列变量,如PATH指定了命令的搜索路径,SHELL指定了默认的Shell。本文介绍了如何加载和管理这些环境变量,以及普通变量与环境变量的区别。 ... [详细]
  • 在Java开发中,如何利用ProcessBuilder类调用外部程序是一个常见的需求。本文将详细介绍ProcessBuilder类的使用方法,并提供示例代码帮助你更好地理解和应用。 ... [详细]
  • 本文详细介绍了苹果笔记本电脑恢复出厂设置的影响以及具体操作步骤,帮助用户更好地了解和执行这一过程。 ... [详细]
  • 本文详细介绍了在Mac平台上安装和配置MySQL的步骤,包括下载安装包、卸载MySQL以及解决命令行中找不到mysql命令的问题。 ... [详细]
  • C# 实现高效分页控件
    在使用 C# 进行数据库开发时,分页功能是常见的需求。为了避免每次编写重复的分页代码,我开发了一个用户控件,使分页操作变得更加简便。 ... [详细]
  • 如何在Win10中将CMD命令行添加到右键菜单
    本文介绍了如何通过注册表编辑器将CMD命令行添加到Windows 10的右键菜单中,以便快速访问命令行界面。 ... [详细]
author-avatar
拍友2502885255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有