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

 



推荐阅读
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文探讨了如何在发布 XenApp 应用时,通过命令行参数实现启动时的参数传递。特别介绍了静态和动态参数传递的方法,并详细解释了 ICA 文件中两种参数传递方式的区别及安全检查机制。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • MongoDB集群配置:副本集与分片详解
    本文详细介绍了如何在MongoDB中配置副本集(Replica Sets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
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社区 版权所有