尽管设置与 DBCP 和 JDBC 完全相同,但 HikariCP 抛出拒绝用户访问
HikariCP throws access denied for user despite the exact same settings as with DBCP and JDBC
我正在尝试将 HikariCP 用于连接池,但尽管使用了我在 DBCP 中使用的所有相同设置(我已验证)并且使用直接 JDBC 连接,但访问被拒绝。我不明白为什么它被拒绝了。
异常:
Caused by: java.sql.SQLException: Access denied for user 'TestUser'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:870)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1206)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2239)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2270)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2069)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:422)
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:134)
at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:444)
at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:548)
... 13 more
我的 JDBC URL 是:jdbc:mysql://localhost:3307/Test
100% 正确(包括端口)。
我唯一设置的是:
//Start our configuration
HikariConfig config = new HikariConfig();
//Set the connection settings
config.setJdbcUrl( "jdbc:mysql://localhost:3307/Test" );
config.setUsername( "TestUser" );
config.setPassword( "test" );
//Data source class
config.setDataSourceClassName( "com.mysql.jdbc.jdbc2.optional.MysqlDataSource" );
//Set our settings
config.addDataSourceProperty( "cachePrepStmts", "true") );
config.addDataSourceProperty( "prepStmtCacheSize", "250" );
config.addDataSourceProperty( "prepStmtCacheSqlLimit", "2048" );
//Create the datasource
dataSource = new HikariDataSource(config);
我正在使用 Java 6.
在这里找到答案:https://github.com/brettwooldridge/HikariCP/issues/386#issuecomment-132256375
I will note that you should either use dataSourceClasName and "dataSource." properties (for server, port, etc), or don't use dataSourceClassName at all and just use the jdbcUrl (but continue to use "dataSource." properties).
从数据源属性中删除密码字段,您面临的问题是 MySql 没有在其保管库中存储任何密码,但是您正在尝试与密码建立连接。
我正在尝试将 HikariCP 用于连接池,但尽管使用了我在 DBCP 中使用的所有相同设置(我已验证)并且使用直接 JDBC 连接,但访问被拒绝。我不明白为什么它被拒绝了。
异常:
Caused by: java.sql.SQLException: Access denied for user 'TestUser'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:870)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1206)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2239)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2270)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2069)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:422)
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:134)
at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:444)
at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:548)
... 13 more
我的 JDBC URL 是:jdbc:mysql://localhost:3307/Test
100% 正确(包括端口)。
我唯一设置的是:
//Start our configuration
HikariConfig config = new HikariConfig();
//Set the connection settings
config.setJdbcUrl( "jdbc:mysql://localhost:3307/Test" );
config.setUsername( "TestUser" );
config.setPassword( "test" );
//Data source class
config.setDataSourceClassName( "com.mysql.jdbc.jdbc2.optional.MysqlDataSource" );
//Set our settings
config.addDataSourceProperty( "cachePrepStmts", "true") );
config.addDataSourceProperty( "prepStmtCacheSize", "250" );
config.addDataSourceProperty( "prepStmtCacheSqlLimit", "2048" );
//Create the datasource
dataSource = new HikariDataSource(config);
我正在使用 Java 6.
在这里找到答案:https://github.com/brettwooldridge/HikariCP/issues/386#issuecomment-132256375
I will note that you should either use dataSourceClasName and "dataSource." properties (for server, port, etc), or don't use dataSourceClassName at all and just use the jdbcUrl (but continue to use "dataSource." properties).
从数据源属性中删除密码字段,您面临的问题是 MySql 没有在其保管库中存储任何密码,但是您正在尝试与密码建立连接。