避免入坑!如何将SpringBoot成功项目部署在外部的tomcat里面!【亲测有效】

这里口吐芬芳一句:操蛋!向服务器部署SpringBoot项目花了我整整一天时间..... 

我们都知道SpringBoot比较特殊,它自己内部已经集成了 Tomcat,它的打包方式也不再是传统的war打包方式,它采用的是jar打包,然后放在服务器里面直接使用命令运行就行,很大程度上便利了我们。但是一个很难受的事实时有些项目中的一些包可能会和内置tomcat发生冲突,比如达梦数据的驱动包。当项目中使用达梦数据时你就不能用内置tomcat,然后带来的问题就是部署时会比较麻烦:

1.首先需要将打包方式改成war,pom文件如下

<name>stressCorrosion</name>

2.继承SpringBootServletInitializer类,并重写configure()方法

@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(StressCorrosionApplication.class);
	}

3.去除内置的tomcat,pom文件如下(这一步可以不做,也能成功)

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!--<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>-->
</dependency>

然后你就可以打包部署了,打包可以使用idea中的打包方式(不赘述),也可以使用maven自带的打包方式(推荐这种,不会自行百度)。

打包成功之后直接扔到tomcat目录下面的webapps下面运行bin文件夹下的./startup.sh(Windows:./startup.bat),启动运行成功,浏览器输入localhost:8080。本以为成功了,但是你会发现404,而且样式全都会失效!但是你会发现当你加上包名:localhost:8080/demo,这时会访问成功,但是你不可能一直手动输入项目名吧,不切实际!

网上很多人的建议是给application.properties或application.yml文件中添加如下内容(这种方法同样适用内置tomcat):

//如果是application.properties:

server.servlet.context-path = /demo  //demo为你的项目名 

//如果是application.yml

server:
  servlet:
    context-path: /demo


这时候你再打包部署到tomcat时,可能有两种情况:成功和继续404!

我看到有人说对application.yml文件中添加上述内容同,将项目部署到外部tomcat时还是会失效。经过我自己的亲身经历来看:使用上述方法将项目部署到Windows下的Tomcat里面时是有效地,部署之后能够正常访问(但此时地址栏并不会出现你指定的项目名,依然是controller里面的路径);但是将项目部署在Linux服务器中时上述方法就会失效(亲测 ),但这时候也不是没有办法,我们可以修改tomcat的server.xml文件(在tomcat里面的conf文件夹下面)中的<Host></Host>,我们可以向该节点中加入如下内容:

<Context path="" docBase="/项目路径/项目名" debug="0" reloadable="true">

有了上述配置之后,重启tomcat之后,输入localhost:8080/之后就会出现你你自己的项目首页,而且css,js文件加载一切正常。

这个问题整整困扰一整天,对于网上的大多数做法在部署到Windows里面是可行的,但是在linux里面就不太可行。我不知道是不是我个人问题,如果有大佬们采用向application.yml添加内容的这种方法并且成功部署到Linux服务器的,希望大佬不吝赐教~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章