Необработанное исключение из сервлета java.lang.RuntimeException: драйвер org.hsqldb.jdbc.JDBCDriver утверждает, что не принимает jdbcUrl, jdbc: mysql: /// iworks_db - PullRequest
3 голосов
/ 05 ноября 2019

Я работаю над приложением Java App Engine Java, и когда я развертываю свое приложение и открываю его в браузере, я получаю вышеуказанную ошибку. 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>

Любыепомощь будет высоко ценится!

1 Ответ

1 голос
/ 05 ноября 2019

Ваш URL-адрес является ссылкой mysql, а драйвер - базой данных 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.SocketFactory предоставляется в mysql-socket-factory-connector-j-8артефакт maven.

Обновление:

Вы также можете вообще не использовать DriverClassName.

Попробуйте добавить две вышеуказанные зависимости и удалите строку setDriverClassName.

...