spring-cloud是基于spring boot的,默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以启动。但是,有时候我们更希望一个tomcat来管理多个项目,这种情况下就需要项目是war格式的包而不是jar格式的包。spring-boot同样提供了解决方案,只需要简单的几步更改就可以了,这里提供maven项目的解决方法。
因为本文主要讲的是部署方面的操作,所以本文不再讲部署之前所需要在项目上所做的工作,具体的我这里引用一篇别人的文章,大家可以先从这个文章入手,然后再部署。百家号有防广告校验,所以下边的链接,请去掉问号之后访问。
https://?www?.cnblogs?.com?/a8457013/p/7687792.html
要在tomcat上部署一个spring cloud微服务项目,首先我们要解决的是端口问题,我们都知道,微服务架构的系统,肯定是有多个端口的,还有,tomcat的端口问题,我们一般使用tomcat,是不是都会把war包或者文件夹直接扔在webapps下边,server.xml里面只有一个配置端口的地方。我们先来看看server.xml配置文件。
打开百度App,看更多图片
server.xml
直接看这个service节点,有一个唯一名称属性name,还有一些子节点是配置端口的,一般情况的话,我们就只改这个8080端口,再把war包放webapps下边就好了。
可以看到,service节点下边有一个host节点,host节点的appBase属性就是配置的项目路径,这个路径可以是绝对路径,也可以是相对路径,默认的appBase就是webapps。
我们的微服务一般是有多个服务的,所以我们就复制出多个service节点,给他赋予上不同的端口号,端口号是有两个地方需要改的,这个得注意下,一个ajp,一个http。这里贴一下我的配置文件,给大家看一下。
server.xm文件
<Host name="lcs-discover" appBase="shunfeng/discover/" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="lcs-discover.war" reloadable="true" allowLinking="true" name="/lcs-discover"></Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
这部分就是具体配置的微服务的配置了,path=""代表该微服务没有上下文根,你也可以自己设置,一般不建议设置,因为我们一般开发的时候,就是没有这个上下文的,直接用server_name去掉其他服务的。docBase="lcs-discover.war"代表的是 appBase="shunfeng/discover/"下边的具体war包服务文件。
这个是我的一个目录结构,其他的服务就仿照这个来创建文件夹,也比较好管理,你也可以直接把文件夹放在代码的target里,代码编译后,war包也就生成了,可以快速更新代码。/root/apache-tomcat-9.0.21/shunfeng/discover。
还有一个需要注意的点,就是我们配置了多个服务在一个tomcat里,都没有配置上下文,这样的话,就会导致tomcat认为他自己启动了多个一样的服务,会报错,这时候只需要在Host节点下边的Context节点属性里,加一个name,例如name="/lcs-discover"标明唯一性。并且yml配置文件里增加
spring:
jmx:
enabled: false
就好了。
文章写得不好,有什么疑问就在下边问吧,我这刚写,写得多了就好了。
本文是从我的百家号“老范教你玩电脑”转载过来的,不是侵权。