2016-12-21 10 views
0

Мне удалось подключиться к базе данных 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.

+0

Он должен работать без какой-либо конкретной конфигурации, вы проверили текущую конфигурацию с помощью Google Cloud SQL? У вас возникли ошибки? –

+0

Я использую mvn appengine: развертывание для развертывания. После этого я пытаюсь вызвать службу отдыха, которая хранит данные с использованием sql из Java, отлично работает. После этого я пытаюсь вызвать службу отдыха, которая использует entitymanager, заканчивая «HibernateException: Unable to JDBC Connection». Точно такая же строка соединения. –

ответ

1

Если вы используете AppEngine, вы можете прочитать https://cloud.google.com/sql/docs/app-engine-connect и https://cloud.google.com/appengine/docs/java/cloud-sql/.

Здесь, кажется, вы пытаетесь подключиться к экземпляру Google Cloud SQL без использования драйвера Google Cloud SQL, но с строкой подключения Google, которая требует этого драйвера, как описаны в их выборке:

// Load the class that provides the new "jdbc:google:mysql://" prefix. 
Class.forName("com.mysql.jdbc.GoogleDriver"); 

Итак, ваша строка соединения не распознается (и драйвер PostgreSQL не помогает).

Если вы не используете AppEngine, переключитесь на драйвер MySQL и удалите «google» в строке подключения, как это было бы со стандартным подключением MySQL (с хостом, портом и т. Д. Вместо имени экземпляра).

 Смежные вопросы

  • Нет связанных вопросов^_^