在tomcat中部署spring boot war应用
spring boot是一个约定优于配置框架,让我们快速搭建spring项目。tomcat是最流行java servlet容器之一。
默认情况下,Spring Boot构建了一个独立的Java应用程序,它可以作为桌面应用程序运行,也可以配置为系统服务,但在某些环境中,我们无法独立安装新服务或手动运行应用程序。
与独立应用程序相反,Tomcat是作为服务安装的,可以在同一个应用程序进程中管理多个应用程序,从而避免为每个应用程序设置特定的设置。
文本我们打算创建一个简单spring boot 应用,并让其运行在tomcat中。
搭建spring boot 应用
我们使用starter模板来搭建一个简单的Spring Boot web应用程序:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
除了标准的@SpringBootApplication之外,不需要其他配置,因为SpringBoot负责默认设置。我们添加了一个简单的REST端点来返回一些有效的内容:
@RestController
public class TomcatController {
@GetMapping("/hello")
public Collection<String> sayHello() {
return IntStream.range(0, 10)
.mapToObj(i -> "Hello number " + i)
.collect(Collectors.toList());
}
}
现在我们执行 mvn spring-boot:run命令运行应用程序,启动浏览器输入地址http://localhost:8080/hello检查结果。
创建Spring boot WAR
Servlet容器期望应用程序满足一定部署约定。对于Tomcat约定是Servlet API 3.0。为了让我们应用满足这些约定,需对应用代码进行一些小的修改。
首先,我们需要打包war应用,而不是jar。因此,需修改pom.xml:
<packaging>war</packaging>
然后,修改最终war文件名,避免包括版本号:
<build>
<finalName>${artifactId}</finalName>
...
</build>
接下来增加tomcat依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
最后,通过tomcat初始化Servlet上下文,需实现SpringBootServletInitializer接口:
@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
}
通过执行mvn clean package命令,生成可在tomcat中部署的war应用。最终war生成路径为target/spring-boot-tomcat.war (假设Maven artifactId 是 “spring-boot-tomcat”)。
通过上面设置让我们的spring boot应用成为非独立运行的应用(如果你让其回到独立运行模式,可以从tomcat依赖中删除provide范围)。
部署war值tomcat
在tomcat中部署war,需下列几个步骤:
- 下载tomcat,解压值tomcat文件夹
- 拷贝war文件值tomcat/webapps/文件夹下
从终端定位至tomcat/bin目录并执行命令
3.1. windows执行catalina.bat
3.2. 类Unix执行catalina.sh
上述步骤比较简单,详细内容可以参考相关文档。
总结
本文我们创建一个简单spring boot应用,然后改变其为非独立运行的war部署在tomcat中。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/81603100