我有一个使用spring数据jpa和hibernate(服务,实体,存储库......)的maven项目。使用AspectJ将所有内容编译为jar文件。
现在我想添加一个REST API以接收POST / GET消息。所以我添加了spring boot和spring web来将RequestMappings和Controller添加到我的项目中。
问题是,我可以不修改项目的main(String[] args)
方法,因此我无法添加Spring引导上下文以便在Tomcat中使用构建。
因为我想知道我是否可以使用安装在我的jar文件将被执行的机器上的tomcat。
我在StackOverflow上找到的唯一方法是编译war并将其部署在Tomcat上。但我的项目架构非常有限。因此,我有一个必须位于特定文件夹中的jar文件,而且我的限制是不修改main(String[] args)
方法,这有点令人讨厌。那么我可以告诉spring使用现有的tomcat并监听传入的连接吗?或者是否有其他方法可以将REST API用于此类项目结构?
答案 0 :(得分:2)
如果要使用现有的Tomcat实例,应部署war文件。该实例正在运行它自己的JVM并挂钩,你应该提供ServletInitializer
。
详细说明如何Deploying Spring Boot Applications. What about the Java EE Application Server?。
但是,我想你想知道,“我如何将它部署到现有的 Tomcat安装,或者是经典的Java EE应用程序服务器 (其中一些花费了很多钱!),如WebSphere,WebLogic或 JBoss?“简单!毕竟,它仍然只是春天,所以很少 是必须的。你需要进行三个直观的改变:从a jar构建到Maven的战争构建:注释掉声明 你的
pom.xml
文件中的spring-boot-maven-plugin插件,然后更改 Maven包装类型为战争。最后,在您的帐户中添加一个Web入口点 应用
您应该进一步阅读本文档,您可以对pom.xml
进行更改以排除未使用的依赖项。
如果您的课程与这些课程有冲突,您可能会遇到问题 作为更大的应用程序服务器的合作伙伴。在这种情况下,使用 您的构建工具的排除或可选的工具 相关的API。
答案 1 :(得分:0)
从JAR迁移到WAR:
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
完全在与调用SpringApplication.run相同的路径上创建ServletInitializer。
package com.example;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
}
P.S。:我还建议使用pom.xml,内部&#34;&#34; tag,以下参数与项目的上下文:
<finalName>myProject</finalName>