gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:53:51 41 4
gpt4 key购买 nike

我想为我的 Spring-Boot 应用程序添加一个备用入口点。我宁愿把它当作一个肥 jar 。这可能吗?

根据他们的documentation , 特性 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> triggers Spring Boot to use the PropertiesLauncher .

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

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

感谢您的帮助!

最佳答案

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

我有一个包含 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();
}

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

就我而言,我想要一个不同的启动器来创建数据库架构并退出,所以我强制使用命令行参数。

关于java - Spring Boot - 如何指定备用启动类? (多个入口点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076911/

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