来自 servlet java.lang.RuntimeException 的未捕获异常:驱动程序 org.hsqldb.jdbc.JDBCDriver 声称不接受 jdbcUrl,jdbc:mysql:///iworks_db
Uncaught exception from servlet java.lang.RuntimeException: Driver org.hsqldb.jdbc.JDBCDriver claims to not accept jdbcUrl, jdbc:mysql:///iworks_db
我正在开发 Java Google App Engine 应用程序,当我部署我的应用程序并在我的浏览器上打开它时,出现上述错误。 iworks_db 是我的数据库的名称,由于某种原因我的应用程序无法连接到它。我正在使用此处找到的指南:https://cloud.google.com/sql/docs/mysql/connect-app-engine.
我的 createConnectionPool 方法:
private DataSource createConnectionPool() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER);
config.setPassword(DB_PASS);
config.setDriverClassName("org.hsqldb.jdbc.JDBCDriver");// This line does NOT exist on the guide
// I added it because I was getting "failed
// to get driver instance" error
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");
config.setMaximumPoolSize(5);
config.setMinimumIdle(5);
config.setConnectionTimeout(10000); // 10 seconds
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
DataSource pool = new HikariDataSource(config);
return pool;
}
我的 pom.xml 文件中的依赖项:
<!-- Compile/runtime dependencies -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.59</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
</dependency>
如有任何帮助,我们将不胜感激!
您的 URL 是 mysql url 而您的驱动程序是 HyperSQL 数据库 (hsqldb)。这就是您获得关于不可接受的 jdbcUrl 的异常的原因。
你的数据库是 Google Cloud mysql,我相信你的其他代码使用 mysql 工厂(com.google.cloud.sql.mysql.SocketFactory),然后更改驱动程序 class 名称如下:
config.setDriverClassName("com.mysql.jdbc.GoogleDriver");
同时将 hsldb maven 依赖替换为
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory-connector-j-8</artifactId>
<version>1.0.14</version>
</dependency>
com.google.cloud.sql.mysql.SocketFactory
在 mysql-socket-factory-connector-j-8
maven 工件中提供。
更新:
您也可以尝试完全不使用 DriverClassName。
尝试添加以上两个依赖项并删除 setDriverClassName 行。
我正在开发 Java Google App Engine 应用程序,当我部署我的应用程序并在我的浏览器上打开它时,出现上述错误。 iworks_db 是我的数据库的名称,由于某种原因我的应用程序无法连接到它。我正在使用此处找到的指南:https://cloud.google.com/sql/docs/mysql/connect-app-engine.
我的 createConnectionPool 方法:
private DataSource createConnectionPool() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER);
config.setPassword(DB_PASS);
config.setDriverClassName("org.hsqldb.jdbc.JDBCDriver");// This line does NOT exist on the guide
// I added it because I was getting "failed
// to get driver instance" error
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");
config.setMaximumPoolSize(5);
config.setMinimumIdle(5);
config.setConnectionTimeout(10000); // 10 seconds
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
DataSource pool = new HikariDataSource(config);
return pool;
}
我的 pom.xml 文件中的依赖项:
<!-- Compile/runtime dependencies -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.59</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
</dependency>
如有任何帮助,我们将不胜感激!
您的 URL 是 mysql url 而您的驱动程序是 HyperSQL 数据库 (hsqldb)。这就是您获得关于不可接受的 jdbcUrl 的异常的原因。
你的数据库是 Google Cloud mysql,我相信你的其他代码使用 mysql 工厂(com.google.cloud.sql.mysql.SocketFactory),然后更改驱动程序 class 名称如下:
config.setDriverClassName("com.mysql.jdbc.GoogleDriver");
同时将 hsldb maven 依赖替换为
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory-connector-j-8</artifactId>
<version>1.0.14</version>
</dependency>
com.google.cloud.sql.mysql.SocketFactory
在 mysql-socket-factory-connector-j-8
maven 工件中提供。
更新:
您也可以尝试完全不使用 DriverClassName。
尝试添加以上两个依赖项并删除 setDriverClassName 行。