严重: maxIdle is deprecated,严重: testWhileIdle is true, validationQuery not set,Druid连接池连接MSQL报错处理
JDK9 引发的血案
1、因为使用mysql-connector的依赖版本对应的mysql数据库冲突,mysql8需要使用8.0.11以上的高版本
2、jdk9的反射本身存在BUG,会有warning警告,一般不影响使用,在后续版本会更新修复
首先检查下自己使用的mysql 是什么版本的,5.5 、5.6版本的使用老依赖就行,新的依赖驱动Driver注册包路径已经改变、老版本依赖已经不适用;
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
druid连接池连接MYSQL报错如下;是因为maxIdle is deprecated 已经被弃用了;
G:\tools\java_jdk\jdk-9.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:
9月 10, 2018 6:54:15 下午 com.alibaba.druid.pool.DruidAbstractDataSource error
严重: maxIdle is deprecated
9月 10, 2018 6:54:15 下午 com.alibaba.druid.pool.DruidDataSource error
严重: testWhileIdle is true, validationQuery not set
9月 10, 2018 6:54:16 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
(1)第一条报错信息解决如下;把过时的配置参数去除;
1.1、附上druid.properties的配置;
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/reba?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
minIdle=3
1.2、再次运行,结果如下;
已解决一个报错信息;
(2)第二条报错信息如下;
严重: testWhileIdle is true, validationQuery not set
2.1、报错信息意思是说:校验没有设置,将testWhileIdle修改为false不再报错,工程正常运行。
但此时MYSQL数据库将不再进行连接验证,存在一定的风险。所以设置true.
把以下配置信息添加到druid.properties配置文件中;
validationQuery:SELECT 1
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
2.2、运行结果如下;
已解决该条报错;
(3)第三条;
9月 10, 2018 7:19:00 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
是日志文件,对你没看错,这是正常的。
(4)附上MyUtils工具类,以及Test测试类;
package utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* @auther SyntacticSugar
* @data 2018/9/10 0010下午 6:17
*/
public class MyUtils {
private static DataSource dataSource;
private static Connection conn = null;
//获取连接
public static Connection getConnection(DataSource dataSource) {
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//获取数据
public static DataSource getSources() {
try {
Properties properties = new Properties();
properties.load(new FileReader("config/druid.properties"));
// String driverClassName = properties.getProperty("driverClassName");
// String url = properties.getProperty("url");
// String username = properties.getProperty("username");
// String password = properties.getProperty("password");
// //已经获取properties数据
//创建数据库连接池 获取数据源,用连接池直接加载Properties
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
return dataSource;
}
//释放资源
public static void shifang(){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
测试类;
package druid;
import org.junit.jupiter.api.Test;
import utils.MyUtils;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @auther SyntacticSugar
* @data 2018/9/10 0010下午 6:17
*/
public class Test1 {
@Test
public void test() {
try {
//获取数据源 连接 释放
DataSource sources = MyUtils.getSources();
Connection conn = MyUtils.getConnection(sources);
String sql= "select * from user";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet resultSet = ps.executeQuery();
//while
while (resultSet.next()) {
String name = resultSet.getString("name");
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
}
MyUtils.shifang();
}
}
更多推荐
所有评论(0)