java报错:com.alibaba.druid.pool.DruidDataSource.info {dataSource-1} inited

JDBC使用Druid连接池连接数据库的时候,遇到报错:com.alibaba.druid.pool.DruidDataSource.info {dataSource-1} inited,具体报错信息如下:

从网页上报错信息,可以看到是获取驱动名称错误。

排查:

这里使用了连接池工具类 DruidUtils.java 来加载数据库配置文件druid.properties

public class DruidUtils {

    //1.定义成员变量
    public static DataSource dataSource;

    //2.静态代码块
    static{
        try {
            //3.创建属性集对象
            Properties p = new Properties();

            //4.加载配置文件 Druid 连接池不能够主动加载配置文件 ,需要指定文件
            InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");

            //5. 使用Properties对象的 load方法 从字节流中读取配置信息
            p.load(inputStream);

            //6. 通过工厂类获取连接池对象
            dataSource = DruidDataSourceFactory.createDataSource(p);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    、、、
}

想到可能是加载配置文件失败,所以debug启动项目,看到获取到的几个属性值都为空。

检查配置文件的配置,key值果然不对,最后进行更正,正确如下:

mysql5.0配置:

#mysql5.0的驱动名称
driverClassName=com.mysql.jdbc.Driver
#注册驱动,convertToNull,返回 null 来替代 0000-00-00 这样的日期
#加上zeroDateTimeBehavior是为了解决异常:java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
#连接数据库的用户名
username=root
#连接数据库的密码
password=123456
#初始化时池中建立的物理连接个数
initialSize=10
#最大的可活跃的连接池数量
maxActive=20
#获取连接时最大等待时间,单位毫秒,超过连接就会失效
maxWait=3000

mysql8.0配置:

#驱动加载
#mysql8.0的驱动名称
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
#连接数据库的用户名
username=root
#连接数据库的密码
password=123456
#初始化时池中建立的物理连接个数
initialSize=10
#最大的可活跃的连接池数量
maxActive=20
#获取连接时最大等待时间,单位毫秒,超过连接就会失效
maxWait=3000

可以看到,mysql 8.0 以后,java 的驱动包发生了变化,从 com.mysql.jdbc.Driver 变为 com.mysql.cj.jdbc.Driver。

还有url 的配置,如果是mysql8.0,里面必须配置一个时区(serverTimezone),com.mysql.cj.jdbc.Driver 需要这个时区 ;

否则会报错:

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.

再次运行,加载成功,也能正常访问数据库,问题解决!

项目结构:

注意事项:

1、使用的mysql数据库版本 和 依赖的驱动 jar的版本要相同,如果不同,会报错;

2、就是上面提到的驱动值driverClassName和url 的 配置,要和相应的mysql版本对应上。

猜你喜欢

转载自blog.csdn.net/u012660464/article/details/110236485
今日推荐