编码工具:idea 2019.1.3 x64
云服务器:阿里云服务器 Linux CentOS7
一、部署前提
-
要使项目在服务器上能够运行,首先需要jdk(或者jre)的一个运行环境:Linux安装JDK教程
-
而由于spring boot内置tomcat,且本文采用的是jar方式,故服务器上可以不需要下载安装tomcat。
-
项目肯定需要数据库支持(本文采用mysql):Linux安装mysql教程
-
如果项目需要用到redis,一般最好用本地的redis:
redis安装教程
redis后台启动及开机自启(这个里面的开机自启会比较容易一点,但是里面那个复制过来的启动文件只需要按照自己服务器redis配置文件所在的位置来进行修改即可)
二、部署项目到服务器
之前都是直接将项目打包成jar,然后再在终端通过rz/sz或者是其他可视化界面进行传输,其实感觉还是挺麻烦的,今天突然间发现了idea也可以和服务器进行连接来进行可视化(果然还是我太菜了 /(ㄒoㄒ)/~~)
- idea连接服务器:idea连接服务器
里面的那个脚本其实我自己没去用(懒得去看怎么执行了)
自己用的执行命令:
java -jar xxxx.jar
(直接运行,终端一关,就无法访问项目)
nohup java -jar xxx.jar
(后台运行jar,终端关闭仍然能访问项目) - 打包jar项目:
首先修改pom.xml文件,将图片里红色框框的补充完整
然后在maven的Lifecycle点击install或package,然后就可以打包
打包生成的jar会放在你的项目里面的target文件夹下
- 部署到服务器:右键点击那个生成的jar,Deployment->upload to xxx…(服务器ip),将其导入到服务器
- 运行jar:在服务器上(终端软件,可以用xShell)通过第一步的命令进行执行了
三、可能遇到的问题
1.访问路径不清楚
在部署上去后,假设原来你在本地运行某一接口的路径为:http://localhost:8888/login
那么,通过上面的方法部署上去后,访问路径应为:http://服务器ip地址:8888/login
2.无法访问网站
这个问题一般可能是防火墙或服务器安全组的问题(em我自己就是这个问题)
- 服务器查看/修改防火墙命令
- 阿里云添加安全组
这个就不多说了,不管是腾讯云还是阿里云,都是先登录服务器,然后到控制台里找到安全组,然后根据需要和提示添加所需要的端口(新增安全组)
3.出现数据库错误/异常
- 运行时出现这个异常:Communications link failure.The last packet sent successfully to the server was 0 milliseconds ago…
一开始出现这个问题,我以为是数据库连接过慢的问题,于是乎,我做了以下两步:
- 在my.cnf里添加了
wait_timeout=31536000
- 将项目的配置文件里面的数据库url最后面添加了
autoReconnect=true
。
顺便附上数据库url:spring.datasource.url=jdbc:mysql://localhost:3306/mytravel?serverTimezone=GMT%2B8&autoReconnect=true
但是我其实上面的第一点是不需要的(根据本人后面测试),第二点我虽然没有测试,但我感觉可能也不需要,因为我在修改完上面之后,错误还是存在,只不过变成了下面的另一个错误。
- 出现了这个异常java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempt…
虽然还是出现了错误,但至少错误变更就表示有进步哈哈哈,于是,根据这个错误,我查阅各大博客资料,总算在评论里看到了,可能是mysql版本不一致的问题
因为我在pom.xml里配置的是8.0xxx的版本,而我服务器的版本只是5.7.25的,所以导致无法连接数据库
解决方法:修改pom.xml里的依赖,将版本改成和服务器一样的或者比服务器低的就行了。
不过低版本的mysql的驱动是com.mysql.jdbc.Driver
,而高版本的驱动是com.mysql.cj.jdbc.Driver
,虽然我不知道具体哪一些是低的,那些是高的,但是8.0.x肯定是高的,5.x肯定是低的(本人实践),其余的就自己再查查看咯。
4. 访问jsp界面出现404异常
由于本项目里面有用到了一点jsp作为界面,所以才会引发这个问题。 o(╥﹏╥)o
- 1. 打包时出错
参考这个链接里的pom.xml: 无法访问jsp - 2. servlet-api依赖出错:
运行出现异常:java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/ser…
据查阅的资料,大部分都是说是spring boot里自带的tomcat的错误,有些博主甚至说要删除tomcat下的某个jar包,em虽然我没试过,但是,tomcat下自带的jar包咱还是不要随便删了的好,毕竟如果真的是因为这个而导致的错误,那tomcat官方应该早就修复了吧(本人盲猜)。
解决方法:在pom.xml里将javax.servlet-api对应的依赖下的版本给删了或注释掉。
如图所示,在修改掉这个之后,这个问题就消失了。
四、结果展示
参考链接:
https://blog.csdn.net/Feng_xiaoqi/article/details/105473707
https://blog.csdn.net/qq_41076797/article/details/86595915