`

23. Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】

阅读更多

 

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

102. Spring Boot之CommandLineRunner和ApplicationRunner【从零开始学Spring Boot】

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求 
为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。

很简单,只需要一个类就可以,无需其他配置。 
创建实现接口 com.kfit.runner.CommandLineRunner 的类

package com.kfit.runner;

 

import org.springframework.boot.CommandLineRunner;

import org.springframework.stereotype.Component;

 

/**

 * 服务启动执行

 *

 * @author   Angel(QQ:)

 */

@Component

public class MyStartupRunner1 implements CommandLineRunner {

 

    @Override

    public void run(String... args) throws Exception {

        System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作<<<<<<<<<<<<<");

    }

 

}

 

 

Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。

如下我们使用@Order 注解来定义执行顺序。

package com.kfit.runner;

 

import org.springframework.boot.CommandLineRunner;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

 

/**

 * 服务启动执行

 *

 * @author   Angel(QQ:412887952)

 */

@Component

@Order(value=2)

public class MyStartupRunner1 implements CommandLineRunner {

 

    @Override

    public void run(String... args) throws Exception {

        System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 11111111 <<<<<<<<<<<<<");

    }

 

}

 

 

package com.kfit.runner;

 

import org.springframework.boot.CommandLineRunner;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

 

/**

 * 服务启动执行

 *

 * @author   Angel(QQ:412887952)

 */

@Component

@Order(value=1)

public class MyStartupRunner2 implements CommandLineRunner {

 

    @Override

    publicvoid run(String... args) throws Exception {

        System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 22222222 <<<<<<<<<<<<<");

    }

 

}

 

启动程序后,控制台输出结果为:

>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 22222222 <<<<<<<<<<<<<

>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 11111111 <<<<<<<<<<<<<

根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序。

 

@Override

    publicvoid run(String... args) throws Exception {

                System.out.println(Arrays.asList(args));

        System.out.println(">>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作11111111<<<<<<<<<<<<<");

    }

 

这里的args就是程序启动的时候进行设置的:

 

SpringApplication.run(App.class, new String[]{"hello,","林峰"});

 

这里为了做演示,配置为固定值了,其实直接接收main中的args即可,那么在运行的时候,进行配置即可。

 

题外话:

eclipse中给java应用传args参数的方法如下:
1、先写好Java代码,比如文件名为IntArrqy.java

2、在工具栏或菜单上点run as下边有个Run Configuration

3、在弹出窗口点选第二个标签arguments

4
、把你想输入的参数写在program argumenst就可以了,多个参数使用空格隔开。
完成后点run即可通过运行结果看到参数使用情况了。

 

 

 

 

分享到:
评论
4 楼 fengrobert 2017-03-17  
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 22222222 <<<<<<<<<<<<<
>>>>>>>>>>>>>>>服务启动执行,执行加载数据等操作 11111111 <<<<<<<<<<<<<


这个是不是从大到小执行呀?
3 楼 董洪臣 2017-01-04  
林祥纤 写道
yuchao2015 写道
实现ApplicationRunner这个接口也可以


这个还不是很确定,有时间我看下。



确实可以
@Component
@Order(value = 0)
class StartupRunner2 implements CommandLineRunner{
    @Override
    public void run(String... strings) throws Exception {
        System.err.println(">>服务启动执行,执行加载数据等操作<222222");
    }
}

@Component
@Order(value = -1)
class StartupRunner3 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        System.err.println(">>服务启动执行,执行加载数据等操作<333333");
    }
}



>>服务启动执行,执行加载数据等操作<333333
>>服务启动执行,执行加载数据等操作<222222
2 楼 林祥纤 2016-12-20  
yuchao2015 写道
实现ApplicationRunner这个接口也可以


这个还不是很确定,有时间我看下。
1 楼 yuchao2015 2016-12-19  
实现ApplicationRunner这个接口也可以

相关推荐

    从零开始学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.pdf...

    从零开始学Spring Boot

    1.26 Spring Boot启动加载数据CommandLineRunner 1.27 Spring Boot环境变量读取和属性对象的绑定 1.28 Spring Boot使用自定义的properties 1.29 改变自动扫描的包 1.30 Spring Boot Junit单元测试 1.31 SpringBoot...

    82. Spring Boot – 启动彩蛋【从零开始学Spring Boot】

    另外,开发者可以创建一个自定义的`Banner`类,扩展`org.springframework.boot.Banner`接口并实现`printBanner()`方法。这个方法允许你在启动时打印任何你想展示的内容,包括ASCII艺术或其他复杂格式。例如: ```...

    27. Spring Boot Junit单元测试【从零开始学Spring Boot】

    Spring Boot Junit单元测试【从零开始学Spring Boot】"的主题,深入探讨Spring Boot中Junit单元测试的使用方法和最佳实践。 首先,我们要了解什么是单元测试。单元测试是一种针对软件中的最小可测试单元(如方法)...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...

    31. Spring Boot导入XML配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...

    92.Spring Boot使用模板velocity【从零开始学Spring Boot】

    《Spring Boot整合Velocity模板引擎详解》 在现代Java Web开发中,Spring Boot以其简洁的配置、强大的功能和高效的开发效率,成为了许多开发者的首选框架。而Velocity作为一款轻量级的模板引擎,能够帮助我们快速...

    22. Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】

    在Spring Boot框架中,拦截器(HandlerInterceptor)是一种强大的机制,用于在请求处理前后执行自定义逻辑。在本文中,我们将深入探讨Spring Boot中的拦截器,了解其工作原理、如何实现以及实际应用。 首先,Spring...

    38. Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】

    在Spring Boot应用中,随着系统复杂度的增加,单一服务器往往无法满足高并发、高可用的需求,因此我们会采用分布式架构。然而,在分布式环境下,传统的基于HTTP Session的状态管理方式会遇到问题,因为每个服务器都...

    47. Spring Boot发送邮件【从零开始学Spring Boot】

    在本篇博文中,我们将深入探讨如何使用Spring Boot发送电子邮件,这是Spring Boot框架的一个非常实用的功能,可以帮助开发者轻松实现企业级应用中的邮件服务。通过学习本文,你可以掌握Spring Boot集成...

    1. [视频]spring boot起步之Hello World【从零开始学Spring Boot】

    在本节中,我们将深入探讨"Spring Boot起步之Hello World"这一主题,这是学习Spring Boot框架的典型入门教程。Spring Boot是由Pivotal团队开发的一个框架,它旨在简化Spring应用程序的初始搭建以及开发过程,通过...

    16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中使用Druid数据源进行编程注入。Druid是一个优秀的数据库连接池,它提供了强大的监控和扩展功能,是许多企业级应用首选的数据源解决方案。...

    29. Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot实现文件上传功能,特别是多文件上传。Spring Boot简化了在Java应用程序中处理文件上传的过程,使得开发者能够更专注于业务逻辑,而不是底层的HTTP操作。以下是对该...

    15. Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中集成并配置Druid数据源以及其监控功能。Druid是一个强大的数据库连接池,它提供了丰富的监控、扩展性以及性能优化特性。Spring Boot简化...

    39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...

    2. [视频]Spring Boot返回json数据【从零开始学Spring Boot】

    在本节【从零开始学Spring Boot】的视频教程中,我们将深入探讨如何在Spring Boot应用中处理JSON数据。Spring Boot作为一个快速开发框架,极大地简化了创建和部署Java web应用程序的过程,同时也为处理HTTP响应提供...

    39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】

    通常,我们会从数据库或其他数据源加载用户信息,并根据这些信息执行验证。 ```java public class UserRealm extends AuthorizingRealm { @Autowired private UserService userService; // 实现认证方法 @...

    21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

    在Spring Boot框架中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们可以帮助我们实现一些自定义的处理逻辑,如数据校验、日志记录、请求拦截等。下面将详细讲解这两个概念及其在实际开发中的...

Global site tag (gtag.js) - Google Analytics