springboot在本地开发通过,部署到服务器上失败,无法访问

自己在本地开发以及测试是没有问题,但是部署到服务器上之后访问失败,先看一下我的简单配置吧

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 都可以采用这种方式 !

以上是我遇到的问题,当然导致这种原因的也有其他的可能性,如果和我的配置不一样的话,那需要好好排查排查了~

参考资料https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#howto-create-a-deployable-war-file

https://blog.csdn.net/hr787753/article/details/78562136

### Jenkins部署Spring Boot项目访问失败的解决方案 当遇到Jenkins部署后的Spring Boot应用无法正常访问的情况时,可能涉及多个方面的原因。以下是详细的排查和解决方法: #### 1. 检查端口冲突 确保目标服务器上的指定端口号未被其他程序占用。可以通过命令`netstat -tuln | grep <port>`来确认端口状态[^2]。 #### 2. 日志审查 利用Spring Boot Jenkins提供的实时日志查看特性,仔细检查服务启动期间的日志输出,寻任何异常错误提示或警告信息。这有助于定位具体问题所在[^1]。 #### 3. 防火墙设置 验证防火墙规则是否允许外部请求到达应用程序监听的端口。对于Linux系统而言,可使用如下命令调整iptables策略: ```bash sudo iptables -A INPUT -p tcp --dport <your_app_port> -j ACCEPT ``` #### 4. 应用配置文件校验 重新审视项目的application.properties 或 application.yml 文件中的server.port属性以及其他络相关参数设定,确保其正确无误并适合当前运行环境的要求。 #### 5. Java版本兼容性 考虑到不同Java版本之间的差异,在某些情况下可能会引起类加载器或其他内部机制的变化从而影响到应用的行为表现。如果本地开发环境中使用的Java版本低于生产环境,则建议统一两者间的版本号以减少潜在风险[^4]。 #### 6. 权限管理 保证执行java -jar 命令启动的应用具有足够的权限读取必要的资源文件夹及其内容,并且拥有写入临时目录的权利以便于处理动态数据存储需求。 通过上述措施通常可以有效排除大部分常见的导致Spring Boot应用经由Jenkins部署后不可达的问题根源。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值