编码工具:idea 2019.1.3 x64
云服务器:阿里云服务器 Linux CentOS7

一、部署前提

  1. 要使项目在服务器上能够运行,首先需要jdk(或者jre)的一个运行环境:Linux安装JDK教程
  2. 而由于spring boot内置tomcat,且本文采用的是jar方式,故服务器上可以不需要下载安装tomcat。
  3. 项目肯定需要数据库支持(本文采用mysql):Linux安装mysql教程
  4. 如果项目需要用到redis,一般最好用本地的redis:redis安装教程redis后台启动及开机自启(这个里面的开机自启会比较容易一点,但是里面那个复制过来的启动文件只需要按照自己服务器redis配置文件所在的位置来进行修改即可)

二、部署项目到服务器

之前都是直接将项目打包成jar,然后再在终端通过rz/sz或者是其他可视化界面进行传输,其实感觉还是挺麻烦的,今天突然间发现了idea也可以和服务器进行连接来进行可视化(果然还是我太菜了 /(ㄒoㄒ)/~~)

  1. idea连接服务器:idea连接服务器 里面的那个脚本其实我自己没去用(懒得去看怎么执行了) 自己用的执行命令:
    java -jar xxxx.jar(直接运行,终端一关,就无法访问项目)
    nohup java -jar xxx.jar (后台运行jar,终端关闭仍然能访问项目)
  2. 打包jar项目
    首先修改pom.xml文件,将图片里红色框框的补充完整
    然后在maven的Lifecycle点击install或package,然后就可以打包

    打包生成的jar会放在你的项目里面的target文件夹下
  3. 部署到服务器:右键点击那个生成的jar,Deployment->upload to xxx…(服务器ip),将其导入到服务器
  4. 运行jar:在服务器上(终端软件,可以用xShell)通过第一步的命令进行执行了

三、可能遇到的问题

1.访问路径不清楚

在部署上去后,假设原来你在本地运行某一接口的路径为:http://localhost:8888/login 那么,通过上面的方法部署上去后,访问路径应为:http://服务器ip地址:8888/login

2.无法访问网站

这个问题一般可能是防火墙或服务器安全组的问题(em我自己就是这个问题)

  1. 服务器查看/修改防火墙命令
  2. 阿里云添加安全组 这个就不多说了,不管是腾讯云还是阿里云,都是先登录服务器,然后到控制台里找到安全组,然后根据需要和提示添加所需要的端口(新增安全组)

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对应的依赖下的版本给删了或注释掉。
如图所示,在修改掉这个之后,这个问题就消失了。

springboot 上传远程服务器 nginx_云服务器

四、结果展示

springboot 上传远程服务器 nginx_spring boot_02