如何在没有war部署的情况下将Spring Boot与现有Tomcat一起使用

时间:2016-10-08 13:45:50

标签: java spring tomcat spring-boot

我有一个使用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用于此类项目结构?

2 个答案:

答案 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:

  • 更改pom.xml上的包装:

<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>

来源:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging