【问题标题】:How to use Helidon for a command-line app?如何将 Helidon 用于命令行应用程序?
【发布时间】:2021-09-22 12:51:51
【问题描述】:

我正在编写一个 Java 命令行应用程序,用于从数据库读取和写入数据,并在完成工作后完成执行。

它永远不会向任何人公开 REST 接口,也不需要启动服务器并监听任何端口。

所以应用是这样的:

public class Main {

    public static void main(final String[] args) {
       // Start Helidon CDI, JTA, etc. - but not JAX-RS
       // No: Server.create().start();
       // No: io.helidon.microprofile.cdi.Main.main(args);

       // Do work
       MyApp myApp = CDI.current().select(MyApp.class).get();
       app.run();

       // Shutdown
       io.helidon.microprofile.cdi.Main.shutdown();
    }
}

但是我初始化了 Helidon 框架,一个 web 服务器启动并开始监听端口 8080(或其他)。即使使用 Helidon 的 Main.main(...) 方法,也会启动 Web 服务器。

那么,如何启动/初始化 Helidon 以用于具有 CDI、JTA、JPA 但没有 Web 服务器的命令行应用程序?

就 Spring Boot 而言,我想我请求的 Helidon 相当于 CommandLineRunner

【问题讨论】:

    标签: helidon


    【解决方案1】:

    如果您只想启动一个 CDI 容器,以便您的应用程序可以由 CDI 管理,那么您可能只使用 SeContainerInitializer,它只是普通的 CDI。您可以在有或没有 Helidon 的情况下执行此操作。

    如果您想使用 Helidon JPA/JTA 功能,它们会通过普通的 CDI 可移植扩展机制公开,因此只需将它们放在您的类路径中。

    【讨论】:

    • 嗯...如果我尝试这样做,Web 服务器仍会在 localhost:8080 上启动,并且我收到不支持 GraalVM 原生映像的警告。我会深入研究一下。
    • 如果包含 Helidon 的网络服务器的组件在类路径上,它将启动一个网络服务器;也许这是你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2020-09-01
    • 2018-01-18
    • 2012-10-26
    • 2020-09-11
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多