在HikariCP(实际上还有JDBC)中,设置驱动程序类名和JDBC URL与设置数据源类名和URL属性之间的区别是什么?
我问,因为我正在集成p6spy和基于我所发现的,我需要定义p6spy驱动程序作为驱动程序类名称,但是当我直接使用数据库(MySQL, MariaDB, H2等)我将它们定义为数据源:
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.p6spy.engine.spy.P6SpyDriver");
config.setJdbcUrl("jdbc:p6spy:mysql://localhost/test");
HikariConfig config = new HikariConfig();
config.setDataSourceClassName("com.mysql.cj.jdbc.MysqlDataSource");
config.addDataSourceProperty("url", "jdbc:mysql://localhost/test");
使用第一种方法是否会失去功能?这两个定义的最终结果有什么不同?
在一种情况下,连接是通过java.sql.DriverManager
创建的(甚至可能直接使用java.sql.Driver
实现),并且您只能使用驱动程序支持的配置属性。
当使用数据源时,您正在使用javax.sql.DataSource
的实现,并且只能使用数据源支持的配置属性。如果我们讨论的是驱动程序提供的DataSource
实现,则通常没有区别。它们通常提供相同(或类似)的配置属性,并产生与通过Driver
实现返回的完全相同的连接。
理论上,使用DataSource
可以有一些好处,因为它是程序化的配置(而不是在URL或Properties
对象中使用属性),而且您可以通过JNDI或其他方式从一些外部配置中获得DataSource
。
但是,当通过HikariCP配置时,特别是按照您的问题所示的方式配置时,没有实质性的差异。