怎么在SpringBoot启动时运行定制-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

怎么在SpringBoot启动时运行定制

这篇文章主要介绍怎么在Spring Boot启动时运行定制,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

做网站、成都网站制作介绍好的网站是理念、设计和技术的结合。创新互联拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、台江网站维护、网站推广。

Spring Boot会自动为我们做很多配置,但迟早你需要做一些自定义工作。在本文中,您将学习如何挂钩应用程序引导程序生命周期并在Spring Boot启动时执行代码。

1.执行bean初始化的方法

Spring启动应用程序后运行某些逻辑的最简单方法是将代码作为所选bean引导过程的一部分来执行。

只需创建一个类,将其标记为Spring组件,并将应用程序初始化代码放在带有@PostConstruct注释的方法中。理论上,您可以使用构造函数而不是单独的方法,但将对象的构造与其实际责任分开是一种很好的做法。

@Component
class AppInitializator {
 
  private static final Logger log = LoggerFactory.getLogger(AppInitializator.class);
 
  @PostConstruct
  private void init() {
    log.info("AppInitializator initialization logic ...");
    // ...
  }
 
}

还可以在主Spring Boot应用程序类中创建一个带有@PostConstruct注释的方法。不要忘记主类也是框架管理的组件。

@SpringBootApplication
public class InitDemoApplication {
 
  // ...
 
  @PostConstruct
  private void init() {
    log.info("InitDemoApplication initialization logic ...");
    // ...
  }
 
}

但这种解决方案感觉就像是一种解决方法而不是真正的解决方案 您可以以非常有限的方式控制Spring框架创建应用程序bean的顺序。如果我们想在创建所有bean之前或甚至在框架启动之前运行初始化逻辑,我们需要找到更好的东西。

2. Spring Boot启动挂钩

使用Spring Boot创建的应用程序的美妙之处在于,运行它们所需的唯一内容是Java Runtime Environment和命令行界面。无需外部工具或应用程序。它就像常规的Java SE程序一样运行。

作为每个Java程序,您都可以在入口应用程序类的静态main方法中开始执行此类应用程序。这就是你可以挂钩Spring Boot初始化过程的重点。

首先更改main方法中的代码,以将启动挂钩附加到单独的方法中。您应该在应用程序启动之前添加Spring Boot挂钩。

public static void main(String[] args) {
  SpringApplication application = new SpringApplication(InitDemoApplication.class);
  addInitHooks(application);
  application.run(args);
}
 
static void addInitHooks(SpringApplication application) {
  // TBD …
}

当Spring Boot应用程序启动时,它会在引导过程的各个步骤上发布几个事件。SpringApplication类的API公开了一个方法,我们可以使用该方法为这些事件添加侦听器。

这是一个在Spring上下文开始创建bean之前发布的事件上运行启动方法的示例:

static void addInitHooks(SpringApplication application) {
  application.addListeners((ApplicationListener) event -> {
    String version = event.getEnvironment().getProperty("java.runtime.version");
    log.info("Running with Java {}", version);
  });
}

根据事件类型,Spring传递给侦听器的对象可以让您访问几个有用的操作。在前面的示例中,我们读取了一些环境属性,但如果需要,我们也可以修改它。

以下是按启动时Spring Boot发布事件的顺序排序的可能事件列表:

  • ApplicationStartingEvent

  • ApplicationEnvironmentPreparedEvent

  • ApplicationContextInitializedEvent

  • ApplicationPreparedEvent

  • ApplicationStartedEvent

  • ApplicationReadyEvent

根据我的经验,最重要的事件是ApplicationEnvironmentPreparedEvent。在Spring Boot启动的这个时刻,尚未创建bean,但您可以访问整个应用程序配置。通常,这是运行一些自定义启动代码的最佳时机。

3.在启动时但没有运行Tomcat时运行代码

尽管Spring Boot设计人员在创建框架时考虑了构建胖JAR,但是一些开发人员仍然将Spring Boot应用程序部署到常规的servlet容器(如Tomcat)。如果是这种情况,那么前一段中的解决方案将无法发挥作用。除非有增加额外步骤。

如果将应用程序部署为常规WAR文件,则可能已经拥有SpringBootServlerInitializator的自定义实现。您只需稍微扩展它并添加初始化挂钩作为应用程序构建过程的一部分。

您可以轻松地重用我们在主应用程序类中创建的addInitHooks()方法。

public class InitDemoWarInitializer extends SpringBootServletInitializer {
 
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    InitDemoApplication.addInitHooks(builder.application());
    return builder.sources(InitDemoApplication.class);
  }
 
}

以上是“怎么在Spring Boot启动时运行定制”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


文章标题:怎么在SpringBoot启动时运行定制
分享链接:http://kswsj.cn/article/phdehg.html

其他资讯