HikariCP + Hibernate + MySql:即使定义正确 'driverClassName' 属性 也会出现警告

HikariCP + Hibernate + MySql: warnings even when defining correct 'driverClassName' property

我在我的 maven 项目中遇到 HikariCPMySql 的问题:一个 警告显示 说:

Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'. The driver has automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

我想摆脱这个警告。

为此,我需要知道为什么即使在其最新版本 MySql 连接器和 HikariCP 配置设置中设置 class com.mysql.cj.jdbc.Driver(这是未弃用的)此警告仍然出现。

这里是pom.xml中的maven依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

然后,我有这个名为 hikaricp-hibernate.properties

的属性文件
jdbcUrl=jdbc:mysql://localhost:3306/local_database
driverClassName=com.mysql.cj.jdbc.Driver

#user and password and other data omitted

现在,对于 HibernateConfiguration,我有:

package mypackage;

// ... imports

@Configuration
@EnableTransactionManagement

public class HibernateConfig {
    private static final String HIBERNATE_PROPERTIES = "/hikaricp-hibernate.properties";

    @Bean(name = "hikariDataSource")
    public DataSource dataSource() {
        HikariConfig config = new HikariConfig(HIBERNATE_PROPERTIES);
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    }
}

在同一个 class 中,我将 LocalSessionFactoryBean 和 TransactionManager 注册为 beans,但这里的代码无关紧要。

我也已经在调试模式下检查了配置,看驱动程序Class名称是否是我输入的那个,答案是肯定的。

因此,即使注册正确,也会显示日志。

此外,HikariCP 文档 告诉我使用 jdbcUrl configuration

The MySQL DataSource is known to be broken with respect to network timeout support. Use jdbcUrl configuration instead.

为什么?

jdbcUrl 配置是否会自动触发旧的 Class(如果是,我如何覆盖和避免这种情况?)?然后它似乎已被弃用并搜索另一个?它会忽略我的 driverClassName 配置吗?

这里的代码没有问题 - 关键点是:

  • 您正在列出对 mysql 连接器的 8.* 分支的依赖,其中包含新的 JDBC 驱动程序
  • 您正在属性文件driverClassName下列出新驱动程序
  • 您正在使用您定义的属性正确实例化 HikariConfig

如果正在加载旧驱动程序,则它不在此代码中 - 它在单独的应用程序中,或者在该应用程序的其他地方。