我想将war应用程序迁移到Spring启动应用程序。
@EnableAutoConfiguration
public class MyInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.banner(new MyBanner());
application.sources(MyEndpoint.class);
return application;
}
}
我得到了可部署的WAR。
我下一阶段我想获得可执行的WAR。我上课了
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyInitializer.class, args);
}
}
问题在于,当我调用java -jar target/myapp.war
MyInitializer时,#configure未执行
我有点困惑。如何避免从MyInitializer到MyApplication的复制粘贴逻辑。我是否必须将这些课程加入其中?
答案 0 :(得分:4)
我个人将两者合并在一起:
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return MyApplication.build(builder);
}
public static void main(String[] args) {
MyApplication.build(new SpringApplicationBuilder()).run(args);
}
private static SpringApplicationBuilder build(SpringApplicationBuilder builder) {
return builder.banner(new MyBanner()).sources(MyEndpoint.class);
}
}
我真的不认为SpringBootServletInitializer
会永远存在
将WAR作为可执行文件启动时执行。即便如此
文件扩展名为WAR
,您实际上将其用作JAR
。
从命令行启动时, Spring Boot入口点是主要方法,SpringBootServletInitializer
不会被解释为 Spring Boot入口点
SpringBootServletInitializer仅在部署为WAR时使用:容器将SpringBootServletInitializer
用作 Spring Boot入口点(并且主方法将被完全忽略)。