`
rensanning
  • 浏览: 3568933 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38588
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:608985
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:684393
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:90533
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:403162
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69970
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:92331
社区版块
存档分类
最新评论

Spring Boot 入门 - 进阶篇(6)- 启动加载(CommandLineRunner)

 
阅读更多
启动成功后可以通过以下方法运行自己的初始代码:
  • @PostConstruct注解
  • ApplicationReadyEvent事件
  • CommandLineRunner/ApplicationRunner接口

@Component
public class StartUpInit {

  @Autowired
  private SomeService service;

  @PostConstruct
  public void init(){
     // ...
  }

}


@Component
public class GeneralEventHandler {

    @EventListener
    public void handleApplicationReady(ApplicationReadyEvent event) {
        log.info("The application is ready to service requests..");
    }

}


Spring Boot提供了两个接口:CommandLineRunner、ApplicationRunner,用于启动应用时做特殊处理,这些代码会在SpringApplication的run()方法运行完成之前被执行。
通常用于应用启动前的特殊代码执行、特殊数据加载、垃圾数据清理、微服务的服务发现注册、系统启动成功后的通知等。相当于Spring的ApplicationListener、Servlet的ServletContextListener。

CommandLineRunner 和 ApplicationRunner 的区别是run()方法的参数不同。

(1)CommandLineRunner:参数是字符串数组
@Component
public class CommandLineAppStartupRunner implements CommandLineRunner {
  private static final Logger logger = LoggerFactory.getLogger(CommandLineAppStartupRunner.class);

  @Override
  public void run(String... args) throws Exception {
    logger.info("Application started with command-line arguments: {} . \n To kill this application, press Ctrl + C.", Arrays.toString(args));
  }
}


(2)ApplicationRunner:参数被放入ApplicationArguments
通过getOptionNames()、getOptionValues()、getSourceArgs()获取参数
@Component
public class AppStartupRunner implements ApplicationRunner {
  private static final Logger logger = LoggerFactory.getLogger(AppStartupRunner.class);

  @Override
  public void run(ApplicationArguments args) throws Exception {
    logger.info("Your application started with option names : {}", args.getOptionNames());
  }
}


也可以两个接口同时实现,但是没有必要。
@Component
public class StartupRunner implements CommandLineRunner, ApplicationRunner  {
  private static final Logger logger = LoggerFactory.getLogger(CommandLineAppStartupRunner.class);

  @Override
  public void run(String... args) throws Exception {
    logger.info("Application started with command-line arguments: {} . \n To kill this application, press Ctrl + C.", Arrays.toString(args));
  }
  
  @Override
  public void run(ApplicationArguments args) throws Exception {
    logger.info("Your application started with option names : {}", args.getOptionNames());
  }
}


也可以通过@Bean定义
@Configuration
public class RunnerConfig {

	@Bean
	public CommandLineRunner runner(){
	  return new CommandLineRunner() {
	    public void run(String... args){
	      System.out.println("CommandLineRunner run()");
	    }
	  };
	}

}


(3)通过@Order设置执行顺序
@Component
@Order(3)
public class Runner1 implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    System.out.println("Runner1 run()");
  }
}

@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    System.out.println("Runner2 run()");
  }
}

@Component
@Order(1)
public class Runner3 implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    System.out.println("Runner3 run()");
  }
}


(4)注入Bean
CommandLineRunner在被执行时,Spring内部已经启动完成,可以注入Spring的Bean。
@Component
public class StartupRunner implements CommandLineRunner {

  @Autowired
  private SampleService sampleService;

  @Override
  public void run(String... args) throws Exception {
    sampleService.executeSample();
  }
  
}
分享到:
评论

相关推荐

    spring-boot-starter-parent-1.5.13.RELEASE.zip

    标题 "spring-boot-starter-parent-1.5.13.RELEASE.zip" 提供的信息表明,这是一个与Spring Boot相关的压缩包,具体来说是Spring Boot的起步依赖(Starter Parent)的一个版本,版本号为1.5.13.RELEASE。Spring Boot...

    jasypt-spring-boot-starter 3.0.5依赖的pom及jar

    《深入解析jasypt-spring-boot-starter 3.0.5依赖的POM与JAR》 在Java开发领域,构建和管理依赖是至关重要的环节。jasypt-spring-boot-starter是一个流行的安全库,它允许开发者在Spring Boot应用中轻松地实现加密...

    spring-boot-starter-web.jar

    Spring Boot 是在 Spring 的基础上创建一款开源框架,它提供了 spring-boot-starter-web(Web 场景启动器) 来为 Web 开发予以支持。spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖...

    dynamic-datasource-spring-boot-starter-3.4.1-API文档-中文版.zip

    赠送jar包:dynamic-datasource-spring-boot-starter-3.4.1.jar; 赠送原API文档:dynamic-datasource-spring-boot-starter-3.4.1-javadoc.jar; 赠送源代码:dynamic-datasource-spring-boot-starter-3.4.1-sources...

    spring-boot-starter-web-2.0.7.0.jar

    spring-boot-starter-web-2.0.7.0.jar

    mybatis-spring-boot-starter-2.1.4.jar

    mybatis-spring-boot-starter-2.1.4.jarmybatis-spring-boot-starter-2.1.4.jar

    activiti-spring-boot-starter-basic-6.0.0适配springboot2.1.2

    activiti-spring-boot-starter-basic-6.0.0适配springboot2.1.2

    mybatis-spring-boot-starter-2.1.3.jar

    mybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jar

    druid-spring-boot-starter-1.2.8.jar

    druid-spring-boot-starter-1.2.8.jar

    spring-boot-security-saml, Spring Security saml与 Spring Boot的集成.zip

    spring-boot-security-saml, Spring Security saml与 Spring Boot的集成 spring-boot-security-saml这个项目在处理 spring-security-saml 和 Spring Boot 之间的平滑集成的同时,在处理内部的配置的gritty和锅炉板的...

    spring-boot-samples-master

    6. **测试**:"spring-boot-sample-test"提供了单元测试和集成测试的示例,使用Spring Boot的测试支持库,可以方便地进行MockMVC和WebApplicationContext测试。 7. **国际化**:"spring-boot-sample-i18n"解释了...

    spring-boot-cli下载

    我们来详细了解一下`spring-boot-cli-2.0.0.M1-bin.zip`这个压缩包以及其中的`spring-2.0.0.M1`文件。 首先,`2.0.0.M1`代表的是Spring Boot的里程碑版本(Milestones),这是在正式版本发布前的一个预览版,用于...

    easypoi-spring-boot-starter-4.0.0.jar

    easypoi-spring-boot-starter-4.0.0.jar 包

    spring-boot-cli-2.0.3.RELEASE-bin.zip

    1. 首先,你需要下载与操作系统匹配的`spring-boot-cli-2.0.3.RELEASE-bin.zip`文件,解压缩后将bin目录添加到PATH环境变量中,以便于在命令行中直接使用`spring`命令。 2. 安装完成后,可以在命令行中运行`spring -...

    spring-boot spring-security-oauth2 完整demo

    本篇文章将围绕“spring-boot spring-security-oauth2 完整demo”这一主题,详细阐述这三个框架如何协同工作,以及如何通过类似微信的方式获取token并访问资源。 首先,Spring Boot是基于Spring框架的快速开发工具...

    mybatis-spring-boot-starter-2.0.0.jar

    mybatis mybatis-spring-boot-starter-2.0.0.jar下载

    Spring Boot 入门 - 基础篇(11)- 数据源配置

    在本篇“Spring Boot入门 - 基础篇(11)- 数据源配置”中,我们将探讨如何在Spring Boot项目中配置数据源,以便连接到数据库并执行相关的CRUD操作。Spring Boot以其自动化配置和简化开发流程而受到广泛欢迎,它使得...

    spring-boot-config-yaml.jar

    spring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot-config-yaml.jarspring-boot...

    graphql-spring-boot-starter, GraphQL的Spring Boot starter.zip

    graphql-spring-boot-starter, GraphQL的Spring Boot starter GraphQL Spring Boot 启动器这是一个用于 GraphQL Java插件项目的Spring Boot 起始。目录概述正在开始运行。版本管理行为准则。捐赠计划确认许可协议...

    spring-boot-2.1.3.RELEASE.jar.rar

    spring-boot-2.1.3.RELEASE.jar -autoconfigure- -devtools- -maven-plugin- -starter- -starter-jdbc- -starter-json- -starter-logging- -starter-test- -starter-tomcat- -starter-web- -test- -test-...

Global site tag (gtag.js) - Google Analytics