【问题标题】:Uncaught exception from servlet java.lang.RuntimeException: Driver org.hsqldb.jdbc.JDBCDriver claims to not accept jdbcUrl, jdbc:mysql:///iworks_db来自 servlet java.lang.RuntimeException 的未捕获异常:驱动程序 org.hsqldb.jdbc.JDBCDriver 声称不接受 jdbcUrl、jdbc:mysql:///iworks_db
【发布时间】:2019-11-05 16:30:56
【问题描述】:

我正在开发一个 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>

任何帮助将不胜感激!

【问题讨论】:

    标签: java maven google-app-engine google-cloud-sql


    【解决方案1】:

    您的 URL 是 mysql url,而您的驱动程序是 HyperSQL 数据库 (hsqldb)。这就是您收到有关不可接受的 jdbcUrl 异常的原因。

    您的数据库是 Google Cloud mysql,我认为您的其余代码使用 mysql 工厂 (com.google.cloud.sql.mysql.SocketFactory),然后将驱动程序类名称更改为以下内容:

     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.SocketFactorymysql-socket-factory-connector-j-8 maven 工件中提供。

    更新:

    您也可以尝试完全不使用 DriverClassName。

    尝试添加上述两个依赖项并删除 setDriverClassName 这一行。

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2019-08-17
      • 2019-09-26
      • 2020-10-29
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2020-08-05
      • 2016-04-16
      相关资源
      最近更新 更多