欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Tomcat】项目部署和运行时遇到的坑(玄学?)

程序员文章站 2022-03-18 17:08:38
...

前言

前段时间租了个阿里云服务器,第一次实操摸索去搭建环境,部署项目。我是用本地虚拟机上的Linux远程连接阿里云服务器,感觉还挺好用。

本博客【不叙述】环境搭建和部署项目的流程和步骤,记录一下我遇到的坑。

坑1:

问题描述和报错:

将war包放到对应目录下。启动Tomcat,能正常访问index.jsp,但是访问测试API则出现以下报错。大概意思好像是无法扫描war包。

【Tomcat】项目部署和运行时遇到的坑(玄学?)

解决:

将war包在对应位置(根据自己的情况)解压成一个文件夹,这个文件夹的名字是这个war包的名字,然后删掉war包。出现这个错误的原理不清楚。

坑2:

问题描述和报错和解决:

可能有不少人你跟我一样在本地测试正常,代码啥都没动,将项目部署到云服务器却出现问题。那极有可能就是环境不一样导致的。

下面是我遇到的一个报错(截图放到最后)。这个报错涉及到代码逻辑,对其他人可能没有什么参考价值。

但是通过报错去定位,发现sessionFactory为空指针。说明了:连接数据库失败!

 

数据库连接失败的原因有很多种:

1、MySQL服务器是否已经启动

 

2、项目的配置文件出现错误。比如说:账号,密码,驱动(不同版本的MySQL要用不同的驱动包

账号和密码我就不说了。我来说说驱动jar包的问题。我在本地的MySQL是5.7,而云服务器上装的是MySQL8。那么需要在idea修改数据库配置文件和gradle依赖。我这里修改的是hibernate的配置文件,主要修改driver和url。修改后driver可能会爆红,因为本地可能还没有对应的驱动jar包。取到build.gradle修改mysql驱动包的依赖,将它修改为8以上。然后不要忘了,rebuild和重新打war包。打好后最好确认一下war里面的配置文件是否真的已经修改成功,防止war包还是以前的。

 

3、MySQL8.0 之前的版本中加密规则是mysql_native_password,而在MySQL8之后,加密规则是caching_sha2_password

可能会出现报错: Authentication plugin 'caching_sha2_password' cannot be loaded。也可能没有,但是数据库连接失败也有可能是这个原因!!!

用户密码的加密规则是可以查看和修改的,对应的信息放在了系统数据mysql种的user表中。

在云服务器上登录进入MySQL数据库,查看用户的加密规则:

use mysql;
select user, host, plugin from user;

【Tomcat】项目部署和运行时遇到的坑(玄学?)

默认root账户并不能使用与远程连接,所以我们要么打开权限,要么新增账户(自行百度)。我这里新增了一个ysq的账户用于远程连接,并且将该用户的密码加密规则修改为mysql_native_password;

ALTER USER '用户名'@'host' IDENTIFIED WITH mysql_native_password BY '该用户的密码';

假设我的ysq用户的密码为:123456,从表格种可以看出它的host的是“%”(任意主机)。那么我要修改它的加密规则,对应的sql语句为:ALTER USER 'ysq'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

修改后,记得刷新权限。

flush privileges;

然后去到云服务器上项目的目录,找到数据库的配置文件,将账户和密码,改为修改了加密规则的账户和其密码。然后记得重启Tomcat!!!

【Tomcat】项目部署和运行时遇到的坑(玄学?)

 

查看日志

如果还找不到哪出问题了,不妨去看看日志有没有什么线索。

查看mysql日志:vim /var/log/mysqld.log (可能不一样,这里是我的路径)

 

查看tomcat日志:vim /opt/tomcat/apache-tomcat-9.0.31/logs/catalina.out

假如找不到tomcat日志在哪,由于日志文件的名字就叫catalina.out,我们可以通过下面的命令来查找:

find / -name catalina.out

相关标签: 云服务器