前言:
在Eclipse中使用springboot项目,运行只须要直接右键默认的启动类DemoApplication.java ,Run As -->Spring Boot App便可。html
可是咱们想把项目的war包部署到服务器的tomcat中,那么就必须作一些修改java
部署到tomcat
环境:
本地:Eclipse、SpringBoot2.1.二、Maven
服务器:CentOs7 JDK1.8 Tomcat9.10web
1.修改打包方式为warspring
在pom.xml中修改:apache
warapi
2.移除嵌入式tomcat插件tomcat
在pom.xml里找到spring-boot-starter-web依赖节点,将其修改为以下:springboot
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
由于spring-boot-starter-web中依赖了spring-boot-starter-tomcat,而咱们如今是使用服务器上的tomcat,天然要排除这个默认的,因此为了让打包的war包小一些,添加如上代码服务器
3.添加servlet依赖app
javax.servlet
javax.servlet-api
provided
4.咱们须要相似于web.xml的配置方式来启动spring上下文,在DemoApplication类的同级添加一个SpringBootStartApplication类,继承SpringBootServletInitializer。其代码以下:
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(DemoApplication.class);
}
}
5. 打包部署
在项目根目录下(即包含pom.xml的目录),在命令行里输入: mvn clean package,或者项目右键Run As ->Maven install
而后把target目录下的war包放到tomcat的webapps目录下,启动tomcat
访问:http://localhost:[端口号]/[打包项目名]/
注意:这个打包项目名是指你的war包名称,通常咱们会编成xxxServer-0.0.1-SNAPSHOT, 因此访问路径为:
http://ip:8080/xxxServer-0.0.1-SNAPSHOT/xxx
若是须要在springboot中加上request前缀,须要在application.properties或者application.yml中添加server.contextPath=/prefix/便可。其中prefix为前缀名。
可是这个前缀会在war包中失效,取而代之的是war包名称(相似于xxxServer-0.0.1-SNAPSHOT),若是war包名称和prefix相同的话,那么调试环境和正式部署环境就是一个request地址了
配置自动化部署
上面的方法只是打包war包,每次都要受到上传tomcat,并重启tomcat。过于繁琐.
咱们使用tomcat的maven插件完成自动部署,和这篇文章相似,能够参考:https://blog.csdn.net/wcc27857285/article/details/82768550
1.修改服务器上tomcat/conf/tomcat-user.xml ,在最后加上以下内容
2.修改tomcat/webapps/manager/META-INF/context.xml
由于tomcat的manager页面是默认只能本机访问,因此还须要修改下usr/local/tomcat/webapps/manager/META-INF/context.xml 配置文件
将Context节点下的Value节点注释便可
或者加入你的本地机器的ip:101.71.45.321,以下图:
而后重启下tomcat,访问下http://serverip:port/manager/html试试,若配置正确,应该能访问该页面
3.在pom.xml文件下加入插件
org.apache.tomcat.maven
tomcat7-maven-plugin
8082
http://xxx.xx.xx.xx:8082/manager/text
kevin
123456
/webapp
true
username 和password和tomcat-user.xml中配置的一致
4.部署
若是是第一次部署,运行mvn tomcat7:deploy进行自动部署(对于tomcat8,9,也是使用tomcat7命令),若是是更新了代码后从新部署更新,运行mvn tomcat7:redeploy。
若是第一次部署使用mvn tomcat7:redeploy,则只会执行上传war文件,服务器不会自动解压部署。若是路径在tomcat服务器中已存在而且使用mvn tomcat7:deploy命令的话,上面的配置中必定要配置true,否则会报错。
部署后访问下http://serverip:port/[项目名] ,成功!
遇到的问题:
eclipse-->run as -->maven install
报错:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
提示找不到能改编译的工具,编译必须用到开发工具,也就是jdk,jre是运行环境,并不具有编译功能。
解决方法:项目右键--> build path --> libraries -->选择jre -->edit-->选择jdk,以下图
2.eclipse -->run as ->maven build-> tomcat7:deploy 时报错
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ RestApi ---
[INFO] Deploying war to http://localhost:8080/
Uploading: http://localhost:8080/manager/text/deploy?path=%2F
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
这个是由于在webapps下已经存在了这个项目。没法执行覆盖更新命令,须要执行redeploy命令才能够覆盖更新。或者执行undeploy先卸载存在的项目,而后再执行deploy便可。
3.eclipse -->run as ->maven build-> tomcat7:deploy