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

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

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

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

stressCorrosion

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

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

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


			org.springframework.boot
			spring-boot-starter-web
			

然后你就可以打包部署了,打包可以使用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文件夹下面)中的,我们可以向该节点中加入如下内容:

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

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

你可能感兴趣的:(SpringBoot,Java,编程错误集)