gpt4 book ai didi

java - 从主类或启动监听器运行临时 Spring Boot 应用程序?

转载 作者:行者123 更新时间:2023-12-01 17:45:21 25 4
gpt4 key购买 nike

这里是 Java 8 和 Spring Boot 2.x。过去几年我一直使用 Spring Boot 来编写 Web 应用程序和 RESTful Web 服务,我非常喜欢它。

我现在需要编写一堆短期(非服务/守护进程)应用程序,这些应用程序需要启动、执行一些工作和关闭。确切的运行时间长度将根据工作负载而变化,但不会超过 10 分钟。尽管它们涉及像传统 Web 应用/服务那样托管任何服务器端 HTTP 代码(REST 端点、 Controller 等),但它们仍然需要:

  • 依赖注入(inject)
  • 基于 YAML 的外部配置
  • 审计
  • 指标
  • 很多普通 Spring Boot 附带的其他东西

所以我看不出有什么理由不能使用 Spring Boot 作为底层框架,即使这些应用程序无法站立 @Controllers@RestControllers .

使用 Spring Boot,如果您不指定任何 Controller ,它就会简单地启动和关闭,因为没有任何东西可以执行。那么问题就变成了:我需要执行的主要代码放在哪里?我想到的两个逻辑位置是:

  1. 就在主窗口内 @SpringBootApplication -带注释的类,其中 main还定义了方法;或者,可能...
  2. ApplicationListener<ContextStartedEvent>实现

我想知道这里是否有正确/错误的方法。我想我只是对 Spring/Boot 生命周期(以及事件执行的复杂顺序)了解不够,无法知道哪个是正确的。

例如,如果 Spring Boot 需要一定的时间才能正常启动,但我将代码全部放在主 @SpringBootApplication 中怎么办? - 带注释的类,它会在几秒钟内执行,并提示 Spring 在其正确完成完全启动之前关闭?所以我想问题归结为这一点,是否有用途:

@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
new MyApp().run();
}

private void run() {
// put all the app code in here?
}
}

或者,类似:

@Component
public class StartupListener implements ApplicationListener<ContextStartedEvent> {
@Override
public void onApplicationEvent(ContextStartedEvent event) {
// put all the app code in here?
}
}

这两种方法的考虑因素是什么? Spring Boot 是否提供了比这两种解决方案更好的解决方案,也许是专门针对短期/短暂应用程序的解决方案?

最佳答案

只是重复 M. Deinum 上面的答案,以便我可以将其标记为已回答。

您可以使用 CommandLineRunner or ApplicationRunner .

关于java - 从主类或启动监听器运行临时 Spring Boot 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60874193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com