У меня возникла очень странная проблема, когда мой сервер App Engine не смог загрузить GoogleDriver своего Cloud SQL, вот ошибка (происходит сразу после запуска «mvn» AppEngine: обновление ").Не удается загрузить класс драйвера JDBC «com.mysql.jdbc.GoogleDriver»
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)
...
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.GoogleDriver'
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 48 more
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.GoogleDriver
appengine.properties
################### MySQL Configuration - Google Cloud App Engine ##########################
jdbc.driverClassName=com.mysql.jdbc.GoogleDriver
jdbc.url=jdbc:google:mysql://mytestapp:testdb?user=someuser
jdbc.username=someuser
jdbc.password=******
jdbc.dialect=org.hibernate.dialect.MySQLDialect
В моей весны контекста файла у меня есть:
<context:property-placeholder location="classpath:appengine.properties" />
<bean
id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" >
<property
name="driverClassName"
value="${jdbc.driverClassName}" />
<property
name="url"
value="${jdbc.url}" />
...
Любые идеи?
==
Просто, чтобы подтвердить, что я уже настроил мой Appengine-web.xml и это не помогает:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>mytestapp</application>
<version>1</version>
<threadsafe>true</threadsafe>
<sessions-enabled>true</sessions-enabled>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
<use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>
-
Я не мог двигаться вперед из-за некоторой несовместимости между версиями jibernate jar, поэтому я продолжал пробовать фактический конвейер выпуска (Jenkins + Maven + build + test + deploy), мне пришлось добавить IP-адрес VM Compute Engine в список разрешенных IP-адресов Cloud SQL-экземпляр для запуска моих модульных тестов и отладки (но, если я придерживаюсь этого подхода, я могу использовать только драйвер MySQL и URL вместо GoogleDriver и URL. Так что это становится сложно ...).
У меня есть эти свойства в файле Production.properties, который загружается мой Spring MVC конфигурационный файл:
################### MySQL Configuration - Google Cloud App Engine ##########################
jdbc.driverClassName=com.mysql.jdbc.GoogleDriver
jdbc.url=jdbc:google:mysql://*******testapp:testsqldb?user=root
jdbc.username=root
jdbc.password=*****
jdbc.dialect=org.hibernate.dialect.MySQLDialect
Есть простой способ динамически переключаться между внешними и GAE Cloud SQL деталей соединения без использования этого подход?
if (SystemProperty.environment.value() ==
SystemProperty.Environment.Value.Production) {
// Connecting from App Engine.
Любые идеи?
JAR-драйвер JDBC MySQL не должен содержать класс GoogleDriver. – duffymo
Только что проверено, и в баночке нет этого класса. Я использую «mysql-connector-java-5.1.14» (указанный в моем pom.xml), и он отлично работает с «mvn appengine: devserver», но я понимаю, что он будет использовать совершенно другой диск, если он развертывается в реальном (удаленном) приложении в облаке Google (т. е. com.mysql.jdbc.GoogleDriver), я получил эту информацию из инструкций в своей консоли Google Cloud Developer - Cloud SQL. – theMarceloR
Ну, похоже, что вы пропускаете какую-то библиотеку в своем пути к классу проектов. Ошибка очень специфична: ** java.lang.ClassNotFoundException: com.mysql.jdbc.GoogleDriver ** –