SSM框架下服务器500报错几个问题汇总
作为J2EE新手,在学校学习接触了hibernate框架,后来渐渐接触到mybatis框架,它比起hibernate来是一个轻量级,半自动化的框架, sql语句写在Mapper.xml文件下降低了代码的耦合性,也更易于sql查询的优化和特殊sql的定制编写。 这几天跟着网上教程一步一步手动搭载出来第一个ssm框架,过程中也遇到了不少坑,现在将这些坑都记录下来,一方面是作为自己学习 的总结积累,另一方面希望能帮助到他人。
环境和各框架版本
- jdk1.8
- mysql-8.0.11
- mybatis-3.4.6
Mysql驱动
mysql5及之前的版本使用的是旧版驱动,mysql6以及之后的版本需要更新到新版驱动
浏览器报错如下
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database!
log4j日志显示
java.sql.SQLException: No suitable driver
解决方法
com.mysql.jdbc.Driver
改为 com.mysql.cj.jdbc.Driver
MysqlTimeZone
报错如下
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
解决方法
在数据库连接属性文件url后面加上&serverTimezone=GMT%2B8
解决方法2
此问题产生的根本原因就是mybatis读取系统时间出现了问题,默认读取CST时间是美国中部时间 Central Standard Time (USA) UT-6:00 所以手动在sql数据库中修改CST时间为 China Standard Time UT+8:00
mysql> set time_zone = '+8:00'
mysql> set global time_zone= '+8:00'
mysql> flush privileges
c3p0连接池
之前hibernate的在全局配置文件中用的原生的DataSource接口org.hibernate.connection.DatasourceConnectionProvider
这次使用的是c3p0连接池,一开始使用的是0.9.1版本,一直报错也找不出来原因,后来更新到0.9.5.2版本就ok了
另一问题是最最大的坑,关于数据库配置文件 报错如下
Access denied for user 'xxx'@'localhost' (using password: YES)
大致意思就是username没有读取到导致无法连接数据库进行操作
解决方法
数据库属性配置文件中的
- url
- driver
要加 前缀 改成
- jdbc.url
- jdbc.driver