自己在本地开发以及测试是没有问题,但是部署到服务器上之后访问失败,先看一下我的简单配置吧
pom.xml文件:工程的打包方式为war
将spring-boot-starter-tomcat的范围设置为provided,
spring-boot-starter-tomcat是Spring Boot默认就会配置的,即上面说到的内嵌tomcat,将其设置为provided是在打包时会将该包(依赖)排除,因为要放到独立的tomcat中运行,Spring Boot内嵌的Tomcat是不需要用到的。
以上就是简单的配置,但感觉没什么问题啊,为什么还是不能访问,最后发现是因为:
若打包成war包,放到tomcat下运行的话,则需要继承 org.springframework.boot.context.web.SpringBootServletInitializer类,覆盖其config(SpringApplicationBuilder)方法,
所以在application启动类同级中加入了下面的类
当然也可以在application中直接继承这个类,然后实现configure方法即可。
ServletInitializer是Servlet初始化器,意思是当本应用作为tomcat的一个webapp时,就调用configure函数,这是tomcat容器调用的,这时整个应用就相当于Servlet。
当作为SpringApplication运行时,会执行main函数,但是不会执行上面的configure函数了。
建议 : 无论 jar 还是 war 都可以采用这种方式 !
以上是我遇到的问题,当然导致这种原因的也有其他的可能性,如果和我的配置不一样的话,那需要好好排查排查了~