在Spring Boot启动后执行指定代码

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/01/01/run-code-after-spring-boot-started/

在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等。

在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Boot使用时就稍微有些区别了。

创建ApplicationListener

这里以填充部分测试数据为例子,首先实现ApplicationStartup类。

publicclass ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
@Override
publicvoidonApplicationEvent(ContextRefreshedEvent event) {
SourceRepository sourceRepository = event.getApplicationContext().getBean(SourceRepository.class);
Source je =new Source("justice_eternal吧","http://tieba.baidu.com/f?kw=justice_eternal");
sourceRepository.save(je);
}
}

这类并不会自动执行,需要我们注册。

硬编码注册

Spring Boot有一个类SpringApplication,这个类是Spring Boot的入口,包含所有的配置。

@Configuration
@ComponentScan
@EnableAutoConfiguration
publicclass WebApplication {
publicstaticvoidmain(String[] args) {
SpringApplication springApplication =new SpringApplication(WebApplication.class);
springApplication.addListeners(new ApplicationStartup());
springApplication.run(args);
}
}

硬编码的弊端在于无法区别环境,当我们需要部署应用到生产环境时需要修改代码。

配置文件

Spring Boot支持profiles模式,在application.properties中配置

spring.profiles.active=dev

然后在application-dev.properties中配置开发环境的参数。

增加一个配置来注册自定义的监听器

context.listener.classes=cn.acgmo.ApplicationStartup

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/01/01/run-code-after-spring-boot-started/

《在Spring Boot启动后执行指定代码》有10条评论

  1. 这样确实可以执行代码,但是获取不到注入到spring中的service,没有办法调用service的方法

    回复
    • 可以获取的,文中的例子不就是获取一个Bean吗?因为可以获得ApplicationContext,所以整个上下文的东西都能够拿到

      回复
    • @Configuration
      @ComponentScan
      @EnableAutoConfiguration
      这3个 注解 什么意思 跟配置监听有关系吗

      回复
  2. spring:
    # profiles:
    # active: dev
    配置文件采用 yml模式, 能问一下 profile 模式 是什么。。。。 不明白

    回复
    • Profile是Spring 3.1开始引入的。可以简单理解为理解为一种配置管理。

      比如我在本地开发用的是内存数据库,生产环境使用的是mysql。我就可以创建两个profile,一个是local,一个prod。然后本地开发active: dev,而生产环境active:prod。这样就可以快速切换配置。

      回复

发表评论