独立 Spring 引导集成 Java 项目
Standalone Spring Boot Integration Java Project
我正在尝试构建一个独立的 Spring 集成应用程序,该应用程序具有基于入站 RabbitMQ 的网关。由于应用程序不需要处理 HTTP 请求,我想让它成为一个 运行nable Java 项目(使用 java -jar 可以很简单 运行 )。我在经历了 Spring Batch Guide example 之后借用了这个想法 :-
Make the application executable
Although batch processing can be embedded in web apps and WAR files,
the simpler approach demonstrated below creates a standalone
application. You package everything in a single, executable JAR file,
driven by a good old Java main() method.
问题 1
我应该如何启动我的 Spring 启动应用程序? Spring 启动 Java 应用程序必须 运行 无休止地直到中断。
问题 2
排除网络项目性质。
目前我正在尝试使用 :-
@SpringBootApplication(exclude = { WebMvcAutoConfiguration.class,
EmbeddedServletContainerAutoConfiguration.class,
DispatcherServletAutoConfiguration.class,
EmbeddedWebApplicationContext.class })
// THESE excludes are not helping. !!!
public class MyIntegrationApplication {
public static void main(String[] args) throws InterruptedException {
System.exit(SpringApplication.exit(SpringApplication.run(
DelinquencyEngineApplication.class, args)));
}
}
因为我的类路径有 Spring Web MVC jar(间接通过 spring-boot-starter-integration 依赖项),尝试 运行 以上主要方法导致此执行:-
Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.hcentive.wfm.delinquency.DelinquencyEngineApplication.main(DelinquencyEngineApplication.java:27)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 7 more
如何才能完全排除web项目性质?在@SpringBootApplication 上尝试了一些排除,但没有帮助。
问题 3
我应该如何处理正常关机?
当有人杀死 Java 应用程序时,我的应用程序不应该突然结束。
Spring 使用 Boot 1.2.3。
谢谢。
问题 1
spring 引导应用程序将 运行 直到您停止它。这是一个标准的 java 应用程序。您可以 运行 使用 java
命令
java -jar target/mymodule-0.0.1-SNAPSHOT.jar
主要问题是包装。看看 :
问题 2
要排除网络性质,您应该使用 SpringApplicationBuilder
生成器
new SpringApplicationBuilder(Application.class).web(false).run(args);
问题 3
在控制台模式下 CTRL+C
将正常关闭。在守护进程模式下,Maven App 汇编程序插件(嵌入 JSW)将输出带有 start/stop 的 shell 脚本。
正如 Gary 所建议的,参见 Spring Integration Documentation about orderly shutdown
我正在尝试构建一个独立的 Spring 集成应用程序,该应用程序具有基于入站 RabbitMQ 的网关。由于应用程序不需要处理 HTTP 请求,我想让它成为一个 运行nable Java 项目(使用 java -jar 可以很简单 运行 )。我在经历了 Spring Batch Guide example 之后借用了这个想法 :-
Make the application executable
Although batch processing can be embedded in web apps and WAR files, the simpler approach demonstrated below creates a standalone application. You package everything in a single, executable JAR file, driven by a good old Java main() method.
问题 1
我应该如何启动我的 Spring 启动应用程序? Spring 启动 Java 应用程序必须 运行 无休止地直到中断。
问题 2
排除网络项目性质。 目前我正在尝试使用 :-
@SpringBootApplication(exclude = { WebMvcAutoConfiguration.class,
EmbeddedServletContainerAutoConfiguration.class,
DispatcherServletAutoConfiguration.class,
EmbeddedWebApplicationContext.class })
// THESE excludes are not helping. !!!
public class MyIntegrationApplication {
public static void main(String[] args) throws InterruptedException {
System.exit(SpringApplication.exit(SpringApplication.run(
DelinquencyEngineApplication.class, args)));
}
}
因为我的类路径有 Spring Web MVC jar(间接通过 spring-boot-starter-integration 依赖项),尝试 运行 以上主要方法导致此执行:-
Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.hcentive.wfm.delinquency.DelinquencyEngineApplication.main(DelinquencyEngineApplication.java:27)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 7 more
如何才能完全排除web项目性质?在@SpringBootApplication 上尝试了一些排除,但没有帮助。
问题 3
我应该如何处理正常关机? 当有人杀死 Java 应用程序时,我的应用程序不应该突然结束。
Spring 使用 Boot 1.2.3。
谢谢。
问题 1
spring 引导应用程序将 运行 直到您停止它。这是一个标准的 java 应用程序。您可以 运行 使用 java
命令
java -jar target/mymodule-0.0.1-SNAPSHOT.jar
主要问题是包装。看看 :
问题 2
要排除网络性质,您应该使用 SpringApplicationBuilder
生成器
new SpringApplicationBuilder(Application.class).web(false).run(args);
问题 3
在控制台模式下 CTRL+C
将正常关闭。在守护进程模式下,Maven App 汇编程序插件(嵌入 JSW)将输出带有 start/stop 的 shell 脚本。
正如 Gary 所建议的,参见 Spring Integration Documentation about orderly shutdown