Mysql6.0连接中的几个问题

在最近做一些java web整合时,因为我在maven官网查找的资源,使用的最新版,6.0.3,发现Mysql连接中的几个问题,总结如下:


1、Loading class `com.mysql.jdbc.Driver'.This isdeprecated. The new driver class is `com.mysql.cj.jdbc.Driver。

按照书上的教程,写了如下的数据库连接配置:

user=root
password=
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/spring
以上配置中,密码我是默认没有设置的。在连接的时候出现以上提示,根据提示,很显然,这种driver配置方式在此版本中已经被废弃,因此需要将driverClass配置为:com.mysql.cj.jdbc.Driver。


2、如下提示:

警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1a0e2e48 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
七月 05, 2016 8:58:29 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1a0e2e48 -- APPARENT DEADLOCK!!! Complete Status: 
...
java.sql.SQLException: 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.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:695)

搜索了一下 需要在Url后面添加一个参数:

?serverTimezone=UTC

即完整的配置应修改为:

user=root
password=
#old driver 
#driverClass=com.mysql.jdbc.Driver
#new driver is as follow:
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/spring?serverTimezone=UTC

然后才能正常连接,加上后测试,连接成功。下图是测试代码以及测试结果:



3、Url中localhost:3306 可以省略,看到有的地方直接写的三个\\\,省略ip和端口,然后直接接某个数据库。因此测试了一下,将配置改为:

user=root
password=
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql:///spring?serverTimezone=UTC

发现也是可以连上的。


4、使用Hibernate整合连接mysql时,出现以下错误:

Disabling contextual LOB creation as createClob() method threw error : java. lang. reflect. InvocationTargetException。

原因: at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:244) ,就是在配置的时候没取到值。那么为什么没取到值呢,是因为Hibernate默认是使用jdbc方式来取的,如果使用连接池的方式的话,必须告诉Hibernate一声,让它不使用单纯的JDBC连接。因此在Hibernate的hibernate.cfg.xml中加入一条属性:

<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
但是在加入此属性时,有一点比较疑惑的是,在引号中输入hibernate后使用自动补全,发现temp属性没有,不知道这是怎么回事。截图如下:


但直接复制以上代码进去,也不会出错。。只能怀疑是eclipse补全功能的锅了!





发布了118 篇原创文章 · 获赞 67 · 访问量 27万+
展开阅读全文

spring动态加载数据源+动态添加数据源

11-24

相信很多开发者也遇到过这样的问题,随着项目的增大,使用的数据源会越来越多,现在比较流行配置数据源的方法是在xml配置文件配置数据源, ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978484_44310.png) 再继承类AbstractRoutingDataSource ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978496_990637.png) 这样做是挺麻烦的,每添加一个数据源,都要做重复的工作,而且好多代码都是重复的。 现在小弟的做法是,把xml的配置转到用java代码装配,数据源参数从数据库获取,按xml配置文件的意思,只要给AbstractRoutingDataSource里的targetDataSources(数据源集合)和defaultTargetDataSource(默认数据源)初始化就好。 具体代码如下: ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978510_435106.png) ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978527_153617.png) ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978540_741057.png) 至此完成从xml配置文件到java代码装配,启动没有问题。使用默认数据源的用户登录系统没有问题,但当使用非默认数据源用户登录系统时,会提示找不到用户,难道加载数据源出问题?只成功加载了默认数据源?但是断点跟踪,数据源集合targetDataSources是有值的。使用其他数据源的用户登录时,下面这个方法也是有返回值的: ![图片说明](https://img-ask.csdn.net/upload/201611/24/1479978551_385665.png) 百思不得其解!有做过这方面的大神可以给点建议吗? 还有一个问题,数据源集合是在系统启动时加载的,如果我在数据库添加多一个数据源,那又怎样可以不用重启系统就可以直接访问这个数据源对应的数据库呢? 在此先谢了! 2016-11-29更新解决办法 动态切换数据源解决办法:原来的配置文件里的数据源集合的key用的是DataSourceType,而我手动装配数据源用的是 ![图片说明](https://img-ask.csdn.net/upload/201611/29/1480429699_315678.png) 装配数据源地方的代码修改如下: ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480467096_241144.jpg) 改后可以自由切换数据源。现在剩下动态添加数据源没有实现。 DataSourceType类型是一个枚举类型。 动态加载数据源关键一点:在系统运行时加载多一个数据源,加载此数据源的对象必须和系统启动时加载数据源的同一个,在我这里加载数据源的对象是类DynamicDataSource,可在这里添加一个加载数据源的方法: ![图片说明](https://img-ask.csdn.net/upload/201701/11/1484099363_286931.jpg) 至于如何得到同一个是类DynamicDataSource,可以在系统启动时在某个地方保存一份此对象,就像保存数据源一样,当需要使用数据源时可以获取。 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览