Spring Hibernate 的 Google Appengine Cloud SQL 问题 [英] Google Appengine Cloud SQL issue with Spring Hibernate
问题描述
我有一个使用 MySQL 在 Amazon EC2 上运行的有效 Spring Hibernate 应用程序.我正在考虑将我的应用程序移植到 Google App Engine,因为 Google 现在通过 Google Can SQL 支持 MySQL.
I have a working Spring Hibernate Application running on Amazon EC2 with MySQL. I am thinking of porting my application to Google App Engine as Google now support MySQL with Google Could SQL.
因此将我现有的应用程序配置为 Google App Engine Web 应用程序,然后编译没有任何错误的代码.我没有对我现有的应用程序进行任何更改,它编译并创建了所需的表,服务器成功启动.
So configure my existing application to Google App Engine Web Application, then compile the code without any error. I have not changed anything to my existing application and it compiled and also created the required tables and the server started successfully.
但是,当运行通过休眠访问数据库的应用程序时,我收到以下错误.
However, when running application that access the database via hibernate, I am getting the following error.
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy30.findById(Unknown Source)
at com.openentry.catgen.services.impl.WebsiteServiceImpl.getMasterDomain(WebsiteServiceImpl.java:99)
我正在为我的实体类使用注释.
I am using annotations for my entity classes.
我需要为此更改什么吗?
Is there anything I need changing for this?
下面是我的 applicationContext.xml
below is my applicationContext.xml
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"
p:username="${jdbc.username}" p:password="${jdbc.password}" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource" p:configurationClass="org.hibernate.cfg.AnnotationConfiguration"
p:packagesToScan="com.package.app.entities">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
<prop key="hibernate.connection.useUnicode">${hibernate.connection.useUnicode}</prop>
<prop key="hibernate.connection.characterEncoding">${hibernate.connection.characterEncoding}</prop>
<prop key="hibernate.connection.charSet">${hibernate.connection.charSet}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
</bean>
<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<constructor-arg>
<ref bean="sessionFactory" />
</constructor-arg>
</bean>
推荐答案
要在 Eclipse localhost 和 appengine 实例上运行 Google Cloud SQL,您必须核对以下几点.
To run Google Cloud SQL on Eclipse localhost and on appengine instance, you must checklist the following points.
- 使用创建 Cloud SQL 实例的同一 google 帐户登录您的 eclipse.
- 右键单击项目属性转到 Google>Appengine 检查启用 Google Cloud SQL 实例
为本地主机选择 MySQL 实例并配置其值.
- Login to your eclipse with the same google account on which your Cloud SQL instance is created.
- Right Click on project properties go to Google>Appengine check the Enable Google Cloud SQL instance
Choose MySQL instance for localhost and configure its values.
Hostname : localhost
Database Name : yourdatabasename
Port No : 3306
Username : yourMySQLUserName
Password : yourPassword
Path to MySQL JDBC Jar : Path where your mysql-connector-java-x.x.xx.jar // I usually put this jar on the WEB-INF/lib
同时配置 Google Cloud SQL 实例:
Configure the Google Cloud SQL Instance as well:
Instance Name : something:something // This you will get under Google Cloud SQL tab under Google API Console
Database Name : yourdatabasename
Username : yourMySQLUserName
Password : yourPassword
只需复制您的 mysql-connector-java-x.x.xx.jar 文件并将其粘贴到 Eclipse 中 Appengine SDK 的这个位置
Just copy your mysql-connector-java-x.x.xx.jar file and paste it under this location of your Appengine SDK in Eclipse
// This path is shown for Eclipse
D:MyEclipsepluginscom.google.appengine.eclipse.sdkbundle_1.7.2.1appengine-java-sdk-1.7.2.1libimpl
驱动程序类名和数据库访问 URL 应更改为以下值.
The Driver ClassName and Database Access URL should be changed to following values.
AppengineDriver Class Name : com.google.appengine.api.rdbms.AppEngineDriver
Database Access URL : jdbc:google:rdbms://instance_name/database_name
e.g. jdbc:google:rdbms://XXXXXX:xxxxx/XXX_databasename
user : username // Your Database User by default its root
password : password // Your Database Password by default its blank in GAE Cloud SQL
按照所有内容,您可以在 Eclipse 中轻松配置 Google Cloud SQL.
By following all the things you can easily configure Google Cloud SQL in Eclipse.
这篇关于Spring Hibernate 的 Google Appengine Cloud SQL 问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!