java.lang.IllegalStateException:无法加载JDBC驱动程序类[com.mysql.jdbc.GoogleDriver]

时间:2016-06-05 16:23:52

标签: google-app-engine google-cloud-sql google-flexible

我正在尝试从 Google Flexible Environment 连接到我的数据库 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]

我尝试连接的数据库是第二代云SQL MySQL 数据库。

为什么我会收到此异常?

App Engine具有此<use-google-connector-j>属性。我没有看到灵活环境中的这个属性 - 至少在那些页面上没有看到我到目前为止所阅读的内容。我的 app.yaml 文件中是否还有其他内容需要添加?

我不确定是否必须在灵活环境中执行此操作,但我目前正在尝试在我的yaml文件中将use-google-connector-j属性设置为true:

use-google-connector-j: true

但目前似乎无效:https://code.google.com/p/googleappengine/issues/detail?id=11444

1 个答案:

答案 0 :(得分:11)

com.mysql.jdbc.GoogleDriver旨在用于App 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

&lt; instance_connection_name&gt;的值可以在Google Cloud Console的Cloud SQL实例概述页面上找到。

注意:如果要在XML文件中指定连接字符串,则可能必须将&之类的特殊字符转义为&amp;

注意:此方法不适用于mysql驱动程序的开发行(6及以上版本)。我不得不使用生产5.1.39版本。