[英]spring boot without tomcat in a standalone jar
我有一个包含三个 jar 文件的项目结构。 所有这些都加载到一个类路径中,然后被执行。 我正在使用 spring 核心、jpa 和 hibernate。 @Services
/ @Autowired
工作正常,以及实体和存储库(都在 mysql 数据库上)。
现在我希望该项目可以通过网络/互联网发送和接收消息。 所以我问了一些人,如何在不破坏我现有结构的情况下实现这一目标。 有人告诉我,spring-boot 是适合我的架构,因为我不需要 Web 服务器(tomcat 或 glassfish)。
但现在我不确定这是否正确,因为我没有找到任何说同样事情的消息来源。 因此,我尝试实施它以自己验证它。
我对我的项目(所有pom.xml
文件和我的配置类)所做的重要更改可以在这里找到:http: //84.141.90.123 : 9910/
从我读到的内容来看,我需要 Spring Boot 的@SpringBootApplication
注释。 这相当于@Configuration
、 @ComponentScan
、 @EnableAutoConfiguration
、 @EnableWebMvc
。
前两个已经在我的结构中。 但是当我添加最后两个注释时,我得到了不同的错误:
当我添加@EnableAutoConfiguration
我得到
Caused by: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
当我添加@EnableWebMvc
我得到
Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling
从我糟糕的英语知识来看, @EnableWebMvc
错误似乎表明该应用程序需要一个 Web 服务器(tomcat 或 glassfish)。
那么主要语句是错误的,如果没有 Web 服务器,我无法启动 Spring Boot?
因为我没有为 spring 使用任何 xml 文件和/或属性文件(它们没有工作),所以我只依赖基于 java 代码的 spring、jpa 和 hibernate 配置。 因此,只有很少的教程/线程有帮助。 大多数情况下,他们只是说add thi or add that to your xml
但因为我没有它们,所以有点麻烦。
另外我用aspectj编译,所以我不能使用spring compile parent。 而且我无法操作主类/方法,因为主类位于不是我编程的外部 jar 文件中。
如此具体:
如果您想通过 HTTP 接收消息(即运行 REST API),那么您需要一个 Web 服务器。
如果您只想通过 HTTP 发送消息,那么您只需要一个 HTTP 客户端。
Spring-boot 可以选择运行嵌入式 Web 服务器(默认为 tomcat),您不需要运行单独的应用程序服务器。
为了解决您的构建问题,我将首先使用spring initializr生成一个项目。
您可以选择您想要的依赖项(尝试使用底部的高级版本链接),它将为您构建一个具有正确结构、构建文件和兼容依赖项的 maven/gradle 项目。
改变:
public static void main(String[] args) {
SpringApplication.run(ActiveMqApplication.class, args);
}
到:
public static void main(String[] args) {
new SpringApplicationBuilder(ActiveMqApplication.class)
.web(WebApplicationType.NONE).run(args);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.