[英]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.