将这个 spring Boot 项目的打包方式设置为 war。
<packaging>war</packaging>
去除內嵌tomcat
SpringBoot 默认有内嵌的 tomcat 模块,因此,我们要把这一部分排除掉。(注意不放在第三方tomcat不要去掉),可以先自测没问题,再去除,当然不去除在第三方tomcat下也可以运行
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 如果在使用自带tomcat请注释下面,如果使用第三方tomcat不要注释下面 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
完整maven配置
<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>springboot</groupId> <artifactId>springboot-test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-test</name> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 如果在使用自带tomcat请注释下面,如果使用第三方tomcat不要注释下面 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency> </dependencies> <build> <plugins> <!-- 如果要打成jar包并使用 java -jar **.jar运行,请不要注释spring-boot-maven-plugin --> <!-- <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>springboot</warName> </configuration> </plugin> </plugins> </build> </project>
项目结构
springboot-test ├── pom.xml ├── src │ ├── main │ │ ├── index.jsp │ │ ├── java │ │ │ └── com │ │ │ └── lhy │ │ │ ├── controller │ │ │ │ └── SampleController.java │ │ │ └── init │ │ │ └── Application.java │ │ └── resources │ │ └── application.properties │ └── test │ ├── java │ └── resources ├── target │ ├── classes │ ├── m2e-jee │ └── test-classes └── work └── Tomcat └── localhost └── aaa
注意,程序不要放在默认的default package 目录下,不然有可能会报错
main程序,Application.java
启动tomcat会自动找
提供一个 SpringBootServletInitializer
子类,并覆盖它的 configure
方法。我们可以把应用的主类改为继承 SpringBootServletInitializer
。或者另外写一个类。
package com.lhy.init; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 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 org.springframework.context.annotation.Configuration; @SpringBootApplication @Configuration @ComponentScan(basePackages="com.lhy") //默认扫描是当前包下的路径 @EnableAutoConfiguration public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
controller 类SampleController.java
package com.lhy.controller; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @Controller public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello world"; } }
打包运行
注意:部署到 tomcat 以后,访问这个项目的时候,须要带上这个项目的 war 包名。
另外,我们还可以使用 war 插件来定义打包以后的 war 包名称,以免 maven 为我们默认地起了一个带版本号的 war 包名称。例如:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>springboot</warName> </configuration> </plugin>
把打包好的springboot.war 放在tomcat中,启动。
输入 localhost:8080/springboot