4

Google フレキシブル環境からGoogle Cloud SQLにデータベースに接続しようとしています。接続文字列とドライバー クラスを以下に示します。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.GoogleDriver" />
    <property name="url" value="jdbc:google:mysql://mz-test:us-central1:mz-life-cloudsql-prod/mz_db" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean>

しかし、私は現在取得しています

org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/classes/context/applicationContext-jooq.xml]: 
            Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; 
            nested PropertyAccessExceptions (1) are:|PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; 
            nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.GoogleDriver]

接続しようとしているデータベースは、第 2 世代の Cloud SQL MySQLデータベースです。

なぜこの例外が発生するのですか?

App Engine にはこの<use-google-connector-j>プロパティがありました。フレキシブル環境のこのプロパティは見たことがありません。少なくとも、これまで読んできたページでは見られませんでした。app.yamlファイルに追加で設定する必要があるものはありますか?


フレキシブル環境でこれを行う必要があるかどうかはわかりませんが、現在use-google-connector-j、yaml ファイルでプロパティを true に設定しようとしています:

use-google-connector-j: true

しかし、これは現時点では機能していないようです: https://code.google.com/p/googleappengine/issues/detail?id=11444

4

1 に答える 1

12

com.mysql.jdbc.GoogleDriverApp Engine スタンダード環境アプリケーションで動作するように設計されています。

App Engine フレキシブル環境アプリケーションで実行される Java アプリケーションの場合、mysql-socket-factoryライブラリを使用します。

Maven ベースのアプリケーションの場合、ライブラリに依存関係を追加します。

<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>mysql-socket-factory</artifactId>
    <version>1.0.1</version>
</dependency>

標準/公式に切り替えますcom.mysql.jdbc.Driver。接続文字列が

jdbc:google:mysql://instance_name/db_name

jdbc:mysql://google/db_name?cloudSqlInstance=<instance_connection_name>&socketFactory=com.google.cloud.sql.mysql.SocketFactory

<instance_connection_name> の値は、Google Cloud Console の Cloud SQL インスタンスの概要ページで確認できます。

注: XML ファイルで接続文字列を指定する場合、.to などの特殊文字をエスケープする必要がある場合があり&ます&amp;

注:この方法は、mysql ドライバーの開発ライン (6 以降) では機能しません。製品版の 5.1.39 バージョンを使用する必要がありました。

于 2016-06-05T20:35:04.263 に答える