这将产生以下日志输出:

In CommandLineRunnerImpl
status=running


如我们所见,该参数未解析,而是解释为单个值“ status = running”。要访问已解析格式的命令行参数,我们需要使用ApplicationRunner接口。我们待会儿再看。Spring Boot将CommandLineRunner接口添加到启动过程中。因此,在commandliner Runner中引发异常将迫使Spring启动中止启动。我们可以在一个应用程序中创建多个CommandLineRunner。使用Ordered接口或@Order批注,我们可以配置它们的运行顺序。较低的值表示较高的优先级。默认情况下,所有组件均以最低优先级创建。这就是为什么没有订单配置的组件将被最后调用的原因。我们可以使用订单注释,如下所示

@Component
@Order(1)
public class CommandLineRunnerImpl implements CommandLineRunner {

}


# 2.具有ApplicationRunner界面如前所述,要访问已解析的参数,我们需要使用ApplicationRunner接口。ApplicationRunner接口为运行方法提供ApplicationArguments而不是原始字符串数组。ApplicationArguments是一个接口,可从org.springframework.boot软件包下的boot 1.3 srping中获得。它提供了以下几种访问参数的方法![image.png](https://upload-images.jianshu.io/upload_images/24195226-f7a6e029033582f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)方法getOptionValues返回值列表,因为参数值可以是数组,因为我们可以在命令行中多次使用同一键。 例如**–name** =“ stacktrace” —端口= 8080 **–name** =“ guru”# 作为接口实现的应用程序运行器示例让我们使用“ status = running –mood = happy 10 –20”参数运行以下程序,并了解输出

@Component
public class ApplicationRunnerImpl implements ApplicationRunner {

@Override
public void run(ApplicationArguments args) throws Exception {

  System.out.println("ApplicationRunnerImpl Called");

//print all arguemnts: arg: status=running, arg: --mood=happy, 10, --20
for (String arg : args.getSourceArgs()) {
System.out.println("arg: "+arg);
}
System.out.println("NonOptionArgs: "+args.getNonOptionArgs()); //[status=running,10]
System.out.println("OptionNames: "+args.getOptionNames()); //[mood, 20]

 System.out.println("Printing key and value in loop:");for (String key : args.getOptionNames()) {System.out.println("key: "+key);     //key: mood  //key: 20System.out.println("val: "+args.getOptionValues(key)); //val:[happy] //val:[]}

}
}


输出:

ApplicationRunnerImpl Called
arg: status=running
arg: --mood=happ
arg: 10
arg: --20
NonOptionArgs: [status=running , 10]
OptionNames: [mood, 20]
Printing key and value in loop:
key: mood
val: [happy]
key: 20
val: []


CommandLineRunner和ApplicationRunner具有类似的功能,例如*   run()方法中的异常将中止应用程序启动
*   可以使用Ordered接口或@Order批注来订购多个ApplicationRunner需要注意的最重要一点是,命令在CommandLineRunners和ApplicationRunners之间共享。这意味着可以在commandlinerRunner和applicationRunner之间混合执行顺序。# 3\. Spring Boot中的应用程序事件Spring框架在不同情况下触发不同事件。它还会在启动过程中触发许多事件。我们可以使用这些事件来执行代码,例如,在Spring Boot应用程序启动后,可以使用ApplicationReadyEvent执行代码。如果我们不需要命令行参数,这是在应用程序启动后执行代码的最佳方法。

@Component
public class RunAfterStartup{

@EventListener(ApplicationReadyEvent.class)
public void runAfterStartup() {
System.out.println(“Yaaah, I am running…”);
}


输出:

Yaaah, I am running…


春季靴子中最重要的事件是*   **ApplicationContextInitializedEvent** :在准备ApplicationContext并调用ApplicationContextInitializers之后但在加载bean定义之前触发
*   **ApplicationPreparedEvent** :在加载bean定义后触发
*   **ApplicationStartedEvent** :在刷新上下文之后但在调用命令行和应用程序运行程序之前触发
*   **ApplicationReadyEvent** :在调用任何应用程序和命令行运行程序之后触发
*   **ApplicationFailedEvent** :如果启动时发生异常则触发可以创建多个ApplicationListeners。可以使用@Order批注或Ordered接口对其进行订购。该顺序与其他相同类型的ApplicationListener共享,但不与ApplicationRunners或CommandLineRunners共享。# 4.方法上的@Postconstruct注解可以使用@PostConstruct批注标记方法。每当使用此注释标记方法时,将在依赖项注入后立即调用该方法。@PostConstruct方法链接到特定的类,因此它仅应用于特定于类的代码。每个类只有一个带有postConstruct批注的方法。

@Component
public class PostContructImpl {

public PostContructImpl() {System.out.println("PostContructImpl Constructor called");
}@PostConstruct
public void runAfterObjectCreated() {System.out.println("PostContruct method called");
}

}


输出:

PostContructImpl Constructor called
postContruct method called


需要注意的是,如果class标记为lazy,则意味着在请求时创建了class。之后,将执行标有@postConstruct批注的方法。标有postConstruct批注的方法可以具有任何名称,但是不能具有任何参数。它必须是无效的,并且不能是静态的。请注意,@postConstruct批注是Java EE模块的一部分,在Java 9中被标记为已弃用,在Java 11中已被删除。我们仍然可以通过将java.se.ee添加到应用程序中来使用它。# 5\. InitializingBean接口InitializingBean解决方案的工作原理与postConstruct批注完全相似。不必使用注释,我们必须实现InitializingBean接口。然后,我们需要重写afterPropertiesSet()方法。InitializingBean是org.springframework.beans.factory包的一部分。

@Component
public class InitializingBeanImpl implements InitializingBean {
public InitializingBeanImpl() {
System.out.println(“InitializingBeanImpl Constructor called”);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(“InitializingBeanImpl afterPropertiesSet method called”);
}
}


您必须考虑如果同时使用@PostConstruct批注和InitializingBean会发生什么。那么在这种情况下,@PostConstruct方法将在InitializingBean的afterPropertiesSet()方法之前调用。# 6\. @bean批注的init属性我们可以在@Bean批注中使用initMethod属性提供一种方法。bean初始化后将调用此方法。initMethod中提供的方法必须为空,并且不能包含任何参数。此方法甚至可以是私有的。

public class BeanInitMethodImpl {

public void runAfterObjectCreated() {System.out.println("yooooooooo......... someone called me");
}

}

@SpringBootApplication

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

  • RabbitMQ实战指南

  • 手写RocketMQ笔记

  • 手写“Kafka笔记”

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

笔记”

[外链图片转存中…(img-WdE7CTlT-1628440512546)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

资料领取方式:戳这里免费领取

实践!在Spring-Boot启动时添加方法运行,查漏补缺相关推荐

  1. 在Spring Boot启动时运行代码

    Spring Boot会自动为我们执行很多配置,但是迟早您将不得不做一些自定义工作. 在本文中,您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 . 因此,让我们看看该框架 ...

  2. Spring Boot 启动执行某个方法的三种实现方式

    Spring Boot 启动执行某个方法的三种实现方式 Spring Boot 启动执行某个方法的三种实现方式 第一种方式 @PostConstruct 注解解释 具体实现 第二种方式 Applica ...

  3. Spring Boot 启动时,让方法自动执行的 4 种方法!

    点击关注公众号,Java干货及时送达 作者:FOEVERYANG 来源:www.cnblogs.com/lsgspace/p/10508180.html 在springBoot中我们有时候需要让项目在 ...

  4. 介绍Spring Boot 启动时,自动执行指定方法的 7 种方法

    目录 前言 实现方式 1.实现ServletContextListener接口contextInitialized方法 2.静态代码块方式 3.@PostConstruct注解方式 4. 实现Serv ...

  5. 【264期】面试官问:Spring Boot 启动时自动执行代码方式有哪几种?解释一二!...

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 目前 ...

  6. Spring Boot启动过程源码分析--转

    https://blog.csdn.net/dm_vincent/article/details/76735888 关于Spring Boot,已经有很多介绍其如何使用的文章了,本文从源代码(基于Sp ...

  7. [Spring Boot] 2. Spring Boot 启动过程定制化

    在上一篇文章中,从源码角度介绍了Spring Boot的启动过程.启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面: 初始化器(Initial ...

  8. mvnw命令启动spring boot项目时出现警告Unrecognised tag: ‘blocked’ (position: START_TAG seen …\r\n …

    文章目录 1.现象 2.解决办法 3.延伸知识(必看) 1.现象 在命令行使用如下命令启动一个spring boot项目时出现如下警告: [WARNING] Some problems were en ...

  9. spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法

    spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法 导入的一个外部的spring boot项目,运行启动类,忽然提示找不到或者无法加载 ...

最新文章

  1. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍
  2. cmd命令重定向到剪切板
  3. 乐山市计算机学校的董事长是,乐山市计算机学校干部主题教育
  4. IE和FireFox中的event事件
  5. 深度学习入行门槛太低,不开心!
  6. Mysql占用CPU过高的时候,该从哪些方面下手进行优化?
  7. python set和frozenset 异同点学习记录
  8. PCIE学习笔记(五)PIO例程设计与仿真分析
  9. 数学算法 湿度计算方法
  10. 论坛报名 | 语音与自然语言处理的最新突破和前沿趋势。道翰天琼认知智能平台为您揭秘新一代人工智能-1。
  11. RLS算法-公式初探
  12. 美团新用户0.99充10元话费,秒到账,不实名不绑卡,超简单!
  13. 并行计算mpi实现矩阵转置,mpi分布式编程简介,点对点通信方法
  14. 灾备联盟牵头研制《云灾备技术发展趋势与应用白皮书》
  15. 机器人运动学仿真笔记
  16. DataBricks从开源到商业化踩过的坑
  17. 【Spring入门学习00】Bean、POJO、DAO、BO的概念
  18. python bs4 BeautifulSoup
  19. c语言char*word,c char* 转dword
  20. Revit2016中文版64位注册机

热门文章

  1. 尚硅谷在线教育项目的坑
  2. 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法
  3. 华为鲲鹏HCIA考试-练习04
  4. GitHub Action入门简介
  5. 压铸过程的冲头“临界速度” | 智铸超云技术分享
  6. Makefile教程(超级详细)
  7. wazuh agent功能详解
  8. 基于autojs7的亚丁号点淘辅助
  9. 在uniapp中怎么实现邀请好友
  10. 各种题材的手游游戏代码素材推荐,不容错过