使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
2016-09-21 16:57
1066 查看
前言:本项目基于maven构建
spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行;
spring-boot项目需要部署在外部容器中的时候,spring-boot导出的war包无法再外部容器(tomcat)中运行或运行报错,本章就是详细讲解如何解决这个问题
org.springframework.boot依赖中的排除项,测试时不要排除内置容器,会导致springboot无法测试运行,导出war包时再加上该项即可
<!-- spring-boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:SpringBootServletInitializer接口需要依赖 javax.servlet
spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行;
spring-boot项目需要部署在外部容器中的时候,spring-boot导出的war包无法再外部容器(tomcat)中运行或运行报错,本章就是详细讲解如何解决这个问题
1、pom.xml一览
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>项目名称自行自行定义</groupId> <artifactId>项目名称自行定义</artifactId> <version>1.1.2-SNAPSHOT</version> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <dependencies> <!-- spring-boot web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-releases</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-releases</id> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories> </project>
2、排除org.springframework.boot依赖中的tomcat内置容器
注意:只有排除内置容器,才能让外部容器运行spring-boot项目org.springframework.boot依赖中的排除项,测试时不要排除内置容器,会导致springboot无法测试运行,导出war包时再加上该项即可
<!-- spring-boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3、实现SpringBootServletInitializer接口
spring-boot入口类必须实现SpringBootServletInitializer接口的configure方法才能让外部容器运行spring-boot项目注意:SpringBootServletInitializer接口需要依赖 javax.servlet
package cn.eguid.Run; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import cc.eguid.livepush.PushManager; import cc.eguid.livepush.PushManagerImpl; import cn.eguid.livePushServer.redisManager.RedisMQHandler; @SpringBootApplication // 开启通用注解扫描 @ComponentScan public class Application extends SpringBootServletInitializer { /** * 实现SpringBootServletInitializer可以让spring-boot项目在web容器中运行 */ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { builder.sources(this.getClass()); return super.configure(builder); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
总结:
外部容器运行spring-boot项目,只需要在原项目上做两件事1、在pom.xml中排除org.springframework.boot的内置tomcat容器
2、spring-boot入口实现SpringBootServletInitializer接口
补充:SpringBootServletInitializer接口依赖javax.servlet包,需要在pom.xml中引入该包
相关文章推荐
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
- 知识点①:springboot使用外部 tomcat 运行配置
- IntelliJ IDEA 配置Gradle运行SpringBoot Web项目(tomcat容器)
- spring boot 项目打成war包发布至外部web容器运行
- 使用SpringBoot搭建小型项目,集成mybatis,redis,swagger2,并部署在外部容器中。
- Spring Boot 项目在外部容器中运行的配置
- springboot项目打成war包使用Tomcat或者其他容器启用
- SpringBoot 项目如何在tomcat容器中运行
- 知识点①:springboot 使用外部 tomcat 运行配置
- springboot如何使用外部tomcat容器
- IntelliJ IDEA 配置Gradle运行SpringBoot Web项目(tomcat容器)
- spring boot项目打包成war并在tomcat上运行的步骤
- spring boot项目打包成war并在tomcat上运行的步骤
- SpringBoot项目打包发布到外部tomcat时,出现各种异常的解决fang
- spring-boot项目在外部tomcat环境下部署
- 把spring-boot项目部署到tomcat容器中
- spring-boot项目部署到tomcat容器中
- Linux环境下Spring Boot项目内置Tomcat参数配置
- SpringBoot项目打包部署外部JavaEE容器