需求缘起:在有【Spring Boot启动加载数据CommandLineRunner】文章中介绍了CommandLineRunner的使用,有人评论说实现ApplicationRunner接口也可以,那么本节就是要介绍ComandLineRunner和ApplicationRunner区别和使用。
(2)共同点和区别;
(3)CommandLineRunner使用例子;
(4)ApplicationRunner使用例子;
(5)使用Ordered接口或者Order注解修改执行顺序;
(6)再次理解共同点和区别以及使用时机;
(7)题外话;
具体内容接着往下看:
(1)使用场景的提出;
我们在开发过程中会有这样的场景:需要在容器启动的时候执行一些内容,比如:读取配置文件信息,数据库连接,删除临时文件,清除缓存信息,在Spring框架下是通过ApplicationListener监听器来实现的。在Spring Boot中给我们提供了两个接口来帮助我们实现这样的需求。这两个接口就是我们今天要讲的CommandLineRunner和ApplicationRunner,他们的执行时机为容器启动完成的时候。
(2)共同点和区别;
共同点:其一执行时机都是在容器启动完成的时候进行执行;其二这两个接口中都有一个run()方法;
不同点:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。
(3)CommandLineRunner使用例子;
CommandLineRunner例子大体的思路是:编写一个class,然后实现CommandLineRunner接口,最后添加@Component注解,具体代码如下:
package com.kfit.config;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* 注意:需要注解:@Component
* @author Angel --守护天使
* @version v.0.1
* @date 2017年1月15日
*/
@Component
public class MyStartupRunner1 implements CommandLineRunner{
@Override
public void run(String... args) throws Exception {
System.out.println("<<<<<<<<<<<<这个是测试CommandLineRunn接口>>>>>>>>>>>>>>");
}
}
运行代码,观察控制台输出:
<<<<<<<<<<<<这个是测试CommandLineRunn接口>>>>>>>>>>>>>>
(4)ApplicationRunner使用例子;
ApplicationRunner例子大体的思路是:编写一个class,然后实现ApplicationRunner接口,最后添加@Component注解,具体代码如下:
package com.kfit.config;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* 注意:需要添加@Component注解
* @author Angel --守护天使
* @version v.0.1
* @date 2017年1月15日
*/
@Component
public class MyStartupRunner2 implements ApplicationRunner{
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("<<<<<<<<<<<<这个是测试ApplicationRunner接口>>>>>>>>>>>>>>");
}
}
运行,观察控制台输出:
<<<<<<<<<<<<这个是测试ApplicationRunner接口>>>>>>>>>>>>>>
(5)使用Ordered接口或者Order注解修改执行顺序;
问题提出: 如果有多个实现类,而我们需要按照一定的顺序执行的话,那么应该怎么办呢?
解决方案:其一可以在实现类上加上@Order注解指定执行的顺序;其二可以在实现类上实现Ordered接口来标识。
需要注意:数字越小,优先级越高,也就是@Order(1)注解的类会在@Order(2)注解的类之前执行。
(6)再次理解共同点和区别以及使用时机;
在之前谈过的区别就不说了,我们看看官方文档对CommandLineRunner和ApplicationRunner的区别说明:
Interface used to indicate that a bean should run when it is contained within a SpringApplication. Multiple CommandLineRunner beans can be defined within the same application context and can be ordered using the Ordered interface or @Order annotation. If you need access to ApplicationArguments instead of the raw String array consider using ApplicationRunner.
其实没有很大区别,如果想要更详细地获取命令行参数,那就使用ApplicationRunner接口。
(7)题外话;
-----------------------------------------------------------------
Eclipse中给java应用传args参数的方法如下:
1、先写好Java代码,比如文件名为IntArrqy.java;
2、在工具栏或菜单上点run as下边有个Run Configuration;
3、在弹出窗口点选第二个标签arguments;
4、把你想输入的参数写在program argumenst就可以了,多个参数使用空格隔开。
完成后点run即可通过运行结果看到参数使用情况了。
-------------------------------------------------------------
视频&交流平台:
http://study.163.com/course/introduction.htm?courseId=1004329008
http://412887952-qq-com.iteye.com/blog/2321532
相关推荐
从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf...
Spring Boot Junit单元测试【从零开始学Spring Boot】"的主题,深入探讨Spring Boot中Junit单元测试的使用方法和最佳实践。 首先,我们要了解什么是单元测试。单元测试是一种针对软件中的最小可测试单元(如方法)...
在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...
1.26 Spring Boot启动加载数据CommandLineRunner 1.27 Spring Boot环境变量读取和属性对象的绑定 1.28 Spring Boot使用自定义的properties 1.29 改变自动扫描的包 1.30 Spring Boot Junit单元测试 1.31 SpringBoot...
Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...
另外,开发者可以创建一个自定义的`Banner`类,扩展`org.springframework.boot.Banner`接口并实现`printBanner()`方法。这个方法允许你在启动时打印任何你想展示的内容,包括ASCII艺术或其他复杂格式。例如: ```...
在Spring Boot应用中,随着系统复杂度的增加,单一服务器往往无法满足高并发、高可用的需求,因此我们会采用分布式架构。然而,在分布式环境下,传统的基于HTTP Session的状态管理方式会遇到问题,因为每个服务器都...
在现代Java Web开发中,Spring Boot以其简洁的配置、强大的功能和高效的开发效率,成为了许多开发者的首选框架。而Velocity作为一款轻量级的模板引擎,能够帮助我们快速生成动态HTML页面,极大地提高了前端展示的...
在Spring Boot框架中,拦截器(HandlerInterceptor)是一种强大的机制,用于在请求处理前后执行自定义逻辑。在本文中,我们将深入探讨Spring Boot中的拦截器,了解其工作原理、如何实现以及实际应用。 首先,Spring...
在本篇博文中,我们将深入探讨如何使用Spring Boot发送电子邮件,这是Spring Boot框架的一个非常实用的功能,可以帮助开发者轻松实现企业级应用中的邮件服务。通过学习本文,你可以掌握Spring Boot集成...
在本节中,我们将深入探讨"Spring Boot起步之Hello World"这一主题,这是学习Spring Boot框架的典型入门教程。Spring Boot是由Pivotal团队开发的一个框架,它旨在简化Spring应用程序的初始搭建以及开发过程,通过...
在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中集成并配置Druid数据源以及其监控功能。Druid是一个强大的数据库连接池,它提供了丰富的监控、扩展性以及性能优化特性。Spring Boot简化...
在本教程中,我们将深入探讨如何使用Spring Boot实现文件上传功能,特别是多文件上传。Spring Boot简化了在Java应用程序中处理文件上传的过程,使得开发者能够更专注于业务逻辑,而不是底层的HTTP操作。以下是对该...
在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中使用Druid数据源进行编程注入。Druid是一个优秀的数据库连接池,它提供了强大的监控和扩展功能,是许多企业级应用首选的数据源解决方案。...
这是Spring Boot的核心特性之一,它使得我们能够以编程方式管理对象,而无需XML配置。让我们逐步解析这个过程。 首先,了解Spring Boot的基础。Spring Boot旨在简化Spring应用程序的初始设置和配置,通过“约定优于...
在Spring Boot框架中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们可以帮助我们实现一些自定义的处理逻辑,如数据校验、日志记录、请求拦截等。下面将详细讲解这两个概念及其在实际开发中的...
通过自动配置和起步依赖,Spring Boot使得开发者可以快速搭建项目并开始开发。 接下来,我们讨论**EHCache**。EHCache是一款开源的、内存中的数据缓存系统,广泛用于Java应用程序中。它可以缓存对象,减少数据库...