Мне удалось подключиться к базе данных Google Cloud SQL с Java. В настоящее время я проверяю это следующим образом:Google Cloud SQL + JPA без WTP
Connection conn = DriverManager.getConnection(getUrl());
Затем извлечение подготовленного заявления из этого и т. Д. getUrl() - это метод, который возвращает URL-адрес в формате, который Google указывает: «jdbc: google: mysql: // xxx/xxx? user = xxx & password = xxx».
Я хотел бы использовать JPA с моей базой данных. Рассматривая документацию Google для этого, они, похоже, рекомендуют WTP a.k.a. Eclipse Web Tools Platform (https://developers.google.com/eclipse/docs/cloudsql-jpatools). Я не использую Eclipse, и мне бы очень хотелось избежать использования этого инструмента для чего-то, что обычно должно быть очень легко достичь без каких-либо gui/wizard/plugin-thingy.
My Java сервлетов написано весной и мое приложение конфигурации выглядит примерно так:
@EnableWebMvc
@EnableScheduling
@EnableTransactionManagement
@EnableJpaRepositories("stuff")
@ComponentScan("stuff")
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource driver = new DriverManagerDataSource();
driver.setDriverClassName("org.postgresql.Driver"); //Obviously not working for Google Cloud SQL
driver.setUrl(Config.getUrl()); // Same url as described above.
driver.setUsername(/*omitted*/);
driver.setPassword(/*omitted*/);
return driver;
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory());
return txManager;
}
@Bean
public EntityManagerFactory entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("stuff");
factory.setPersistenceUnitName("PU");
factory.setDataSource(dataSource());
factory.afterPropertiesSet();
return factory.getObject();
}
}
Мой persistence.xml ищет что-то вроде этого:
<?xml version="1.0" encoding="UTF-8"?>
<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="PU">
<class>stuff.Message</class>
<properties>
<property name="javax.persistence.jdbc.user" value="root" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
</properties>
</persistence-unit>
</persistence>
Есть ли способ, что я может изменить мой AppConfig.java + persistence.xml, чтобы сделать эту работу с Google Cloud SQL? Как уже упоминалось, мне бы хотелось пропустить плагин Eclipse.
Он должен работать без какой-либо конкретной конфигурации, вы проверили текущую конфигурацию с помощью Google Cloud SQL? У вас возникли ошибки? –
Я использую mvn appengine: развертывание для развертывания. После этого я пытаюсь вызвать службу отдыха, которая хранит данные с использованием sql из Java, отлично работает. После этого я пытаюсь вызвать службу отдыха, которая использует entitymanager, заканчивая «HibernateException: Unable to JDBC Connection». Точно такая же строка соединения. –