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

前言

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

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

坑1:

问题描述和报错:

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

解决:

将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;

默认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!!!

查看日志

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

查看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

发布了24 篇原创文章 · 获赞 2 · 访问量 1900

猜你喜欢

转载自blog.csdn.net/qq_43290318/article/details/104769757
今日推荐