publish spring boot war to tomcat
yangyp8110 edited this page Jan 17, 2018
·
2 revisions
- Spring-boot 除了打成jar包,直接通过内嵌tomcat运行外,还可以打包成war,发布到tomcat。以tomcat 8为例:
project : springboot-war
打包改为war
<packaging>war</packaging>
main方法重写SpringBootServletInitializer
@SpringBootApplication
public class ApplicationMain extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return super.configure(builder);
}
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
Tomcat安装目录,打开..\conf\tomcat-users.xml,在这个配置文件中加入以下内容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>
重启tomcat
[root@localhost apache-tomcat-8.5.11]# ./bin/shutdown.sh
[root@localhost apache-tomcat-8.5.11]# ./bin/startup.sh
访问路径
http://192.168.159.134:8080/manager/html
,如果提示如下信息,是tomcat设置了ip访问限制:
You are not authorized to view this page.
By default the Host Manager is only accessible from a browser running on the same machine as Tomcat. If you wish to modify this restriction, you'll need to edit the Host Manager'scontext.xml file.
……
……
查看Tomcat安装路径下的
webapps/manager/META-INF/context.xml
配置:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
- allow是正则表达式,限制了本机访问,增加
192.168.159.*
同网段的访问:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.159.*" />
</Context>
- 重启tomcat,重新访问
http://192.168.159.134:8080/manager/html
,查看tomcat manager页面:
编辑项目使用的maven的配置,一般默认是
C:\Users\[username]\.m2
下的settings.xml
,在<servers>
下加入如下配置:
<server>
<id>testEnv</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
mvn tomcat7:deploy -e
//如果已经发布过,再次发布会报错
mvn tomcat7:redeploy -e
//重新发布命令
发布错误:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.439 s
[INFO] Finished at: 2016-11-24T18:46:17+08:00
[INFO] Final Memory: 32M/204M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project springboot-war: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) on project springboot-war: Cannot invoke Tomcat manager
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.
tomcat 没有启动,启动本地tomcat,再次发布,发布成功。
本地tomcat服务器下可以看到文件夹springboot-war
和文件springboot-war.war
:
Tomcat Manager
管理发布的站点:
通过浏览器访问地址:http://192.168.159.134:8080/springboot-war/index 可以看到访问成功。
<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-run-with-tomcat</groupId>
<artifactId>springboot-war</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>springboot-war</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<project.deploy>deploy</project.deploy>
<project.tomcat.version>8.0.0-RC5</project.tomcat.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>${project.tomcat.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- Tomcat6将text替换为html-->
<url>http://192.168.159.134:8080/manager/text</url>
<!-- 用户名密码与Maven的Setting文件一致 -->
<server>testEnv</server>
<!--发布名称 取项目的artifactId -->
<path>/${project.artifactId}</path>
</configuration>
</plugin>
</plugins>
</build>
</project>