繁体   English   中英

Spring Boot - 如何指定备用启动类? (多个入口点)

[英]Spring Boot - How to specify an alternate start-class? (Multiple Entry Points)

我想为Spring-Boot应用程序添加一个备用入口点。 我宁愿把它当成一个胖罐子。 这可能吗?

根据他们的文档 ,属性loader.main指定要启动的主类的名称。

我试过java -jar MyJar.jar --loader.main=com.mycompany.AlternateMain但是我的pom.xml中指定的start-class仍然运行(如果我从pom.xml中删除它,那么我在包装过程中出错了)。

或者,我尝试了java -cp MyJar.jar com.mycompany.AlternateMain但我不知道将所有嵌套jar添加到类路径的好方法。

有什么建议?

编辑:这是我使用的解决方案

正如jst建议的那样,我改变了我的启动器以使用PropertiesLauncher。 我通过修改spring-boot-maven-plugin的配置来做到这一点。

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <mainClass>${start-class}</mainClass>
    <layout>ZIP</layout>
    ...

<layout>ZIP</layout> 触发Spring Boot以使用PropertiesLauncher

我创建了我的胖罐(mvn包),然后像这样调用备用main:

java -jar -Dloader.main=com.mycompany.AlternateMain MyJar.jar

谢谢您的帮助!

我认为财产不适用于您的情况。 有3种不同的“发射器”(回到文档并查看)。 如果你正在构建一个jar,它使用JarLauncher类。 如果将其切换到PropertiesLauncher,那么loader.main将非常有用。

META-INF / MANIFEST.MF

Main-Class: org.springframework.boot.loader.PropertiesLauncher

我采用了不同的方法并使用命令行参数来确定要用作SpringApplication类的类。 我只有一个main()方法,但是具有基于命令行参数使用的不同配置的不同Application类。

我有一个带有main()的类:

public static void main(String[] args) {
    SpringApplication app;
    if( ArrayUtils.contains(args, "--createdb")){
        app = new SpringApplication(CreateDB.class);
        args = (String[])ArrayUtils.add(args, "--spring.jpa.hibernate.ddl-auto=create");
    } else {
        app = new SpringApplication(Application.class);
    }

    app.setWebEnvironment(false);
    app.setShowBanner(false);
    app.addListeners(new ConfigurationLogger());

    // launch the app
    ConfigurableApplicationContext context = app.run(args);

    // finished so close the context
    context.close();
}

但是我有两个不同的SpringApplication类:Application.class和CreateDB.class。 每个类定义不同的@ComponentScan路径以及不同的@EnableAutoConfiguration选项和不同的@Configuration选项。 最后,根据我的命令行参数,我可以决定是否以编程方式启用其他配置文件/等。

在我的情况下,我想要一个不同的启动器来创建数据库模式并退出,所以我强制命令行参数。

我建议只使用一个main但使用Spring配置文件(或配置属性)来选择一个或其他“入口点” @Configuration类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM