一、使用内嵌Tomcat打成jar包的形式部署
SpringBoot项目部署在linux系统上时,通过启动脚本启动项目时,启动完成后接着重复启动,然后一直循环下去!

解决办法是在配置文件中添加这个配置:

spring.devtools.restart.enabled=false 
1
二、以war包形式部署到外部Tomcat
1、SptingBoot项目的原因
1、未排除SpringBoot内嵌的Tomcat

// 项目为war形式
<packaging>war</packaging>  

<dependency>    
  <groupId>org.springframework.boot</groupId>    
  <artifactId>spring-boot-starter-web</artifactId>    
  <!-- 去除内嵌tomcat -->    
  <exclusions>    
    <exclusion>    
      <groupId>org.springframework.boot</groupId>    
      <artifactId>spring-boot-starter-tomcat</artifactId>    
    </exclusion>    
  </exclusions>    
</dependency>    
<!--添加servlet的依赖-->    
<dependency>    
  <groupId>javax.servlet</groupId>    
  <artifactId>javax.servlet-api</artifactId>    
  <version>3.1.0</version>    
  <scope>provided</scope>    
</dependency>



二、Tomcat配置的原因
问题发生的环境:

在Tomcat的默认的server.xml里面,错误的配置了Host或者Context标签

例如下面的配置就会导致Tomcat重复加载项目:web-sys

在server.xml里配置:

<Host name="www.xxx.com" appBase="webapps" autoDeploy="true" unpackWARs="true">  
    <Alias>www.xxx.cn</Alias>   
    <Alias>www.xxx.com.cn</Alias>   
    <Context docBase="web-sys" path=""/>  
</Host> 



问题发生的原因:

根据server.xml里配置的,Tomcat首先根据Context的配置内容生成第一个StandardContext对象,加载一次项目。然后再根据Host/appBase的配置对webapps下面的项目(web-sys)生成第二个StandardContext,再加载一次项目。Tomcat针对同一项目生成两个StandardContext的原因就是因为他们的名字不同,Tomcat认为是两个Context,所以加载了两次。而他们的名字是谁决定的呢?第一个StandardContext的名字是由标签:Context的配置来决定的,而第二个StandardContext的名字是由项目名称(web-sys)决定的。

解决办法:

其实server.xml的Context标签有一个隐藏属性:name,只需要把此name设置为项目名称就可避免重复加载的问题。

例如下面的配置:

<Host name="www.xxx.com" appBase="mywebapps" autoDeploy="true" unpackWARs="true">  
    <Alias>www.xxx.cn</Alias>   
    <Alias>www.xxx.com.cn</Alias>   
    <Context docBase="web-sys" path="" name="/web-sys"/>  
</Host> 



注意:在server.xml里有默认的Host(localhost)的配置,这个配置里会加载Tomcat的一些默认项目。如果想保留这个配置,又想为自己的项目配置域名,那么就必须新增一个host,并且appBase不能设置为:webapps(可以新建一个同级目录的文件夹用来存放项目,例如上面配置的appBase=”mywebapps”)。
 

帖子状态

话题参与者

回复显示排序:
[抱拳]收益匪浅啊,多谢帮忙
[抱歉的流汗]这是对你的惩罚,希望你能收到邮件

给大家安利一款免费的在线流程图设计软件:贼好用 ProcessFlow — 免费在线作图、实时协作 ProcessFlow是一个在线作图工具的聚合平台, 它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等, 您无需担心下载和更新的问题, 不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作,解放您的双手,让您腾出双手去成就别人的梦想。

Finally!
有没有特别的设计建议或更新的指南?
Finally!
您好,这边没有的。
tesla02 best answer
6 Jan,2019
Finally!
有没有特别的设计建议或更新的指南?
此帖子已被版主标记,收到太多否决票。

这是太大的预览图像,它应该更小,甚至五行。在一个页面上有30到60个页面,它是1800个项目 类别例如在附加组件类别有22749个项目,为什么不看到所有的项目,但只有那1800个项目?这是件坏事。

看起来您是个新人,欢迎免费注册社区,加入我们的大家庭,一起学习,一起成长。
提交你的评论
System.out.println("请输入你的代码块...");
话题
分类
喜欢
回复
浏览
活跃
原创社区
985
0
1.5k
原创社区
985
1
1.5k
20/12/25 22:32:21
javaWeb
985
1
1.5k
20/06/15 22:09:21
youtube
698
78
2.1k
3d
Settings

请插入代码块