热门标签 | 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()里面的值越小启动越早。

 



推荐阅读
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 本文介绍了如何通过在数据库表中增加一个字段来记录文章的访问次数,并提供了一个示例方法用于更新该字段值。 ... [详细]
  • 本文将指导如何向ReactJS计算器应用添加必要的功能,使其能够响应用户操作并正确计算数学表达式。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • MacOS 重装指南
    本文详细介绍了如何通过U盘启动并重新安装MacOS,包括遇到安装问题时的解决方案。 ... [详细]
  • Redis安全防护深入解析
    本文详细探讨了如何通过指令安全、端口管理和SSL代理等措施有效保护Redis服务的安全性。 ... [详细]
  • 近期,考虑到在Vim内部进行GDB调试、运行Python脚本和数据库连接等多样化需求,思考是否可以通过集成终端来简化这些操作,而非逐一编写Vim脚本来实现。通过研究发现,确实存在一种高效的方法——利用特定插件实现终端功能的整合。 ... [详细]
  • Docker 自定义网络配置详解
    本文详细介绍如何在 Docker 中自定义网络设置,包括网关和子网地址的配置。通过具体示例展示如何创建和管理自定义网络,以及容器间的通信方式。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中安装MySQL 5.5.37时遇到的启动失败和PID文件问题,并提供了详细的解决方案,包括日志分析、权限检查等步骤。 ... [详细]
  • 本文介绍了如何在MATLAB中实现单变量线性回归,这是基于Coursera上Andrew Ng教授的机器学习课程中的一个实践项目。文章详细讲解了从数据可视化到模型训练的每一个步骤。 ... [详细]
  • [Head First设计模式笔记]命令模式
    命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。类图:适用设计方案举例:实现一种遥控器,该遥控器具有七个可编程的插 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
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社区 版权所有