2016-12-21 3 views
0

Java에서 Google Cloud SQL 데이터베이스에 연결할 수있었습니다. 현재 다음과 같이 확인했습니다.Google Cloud SQL + JPA (WTP 제외)

Connection conn = DriverManager.getConnection(getUrl()); 

그런 다음 준비된 문을 검색하는 등의 작업을 수행했습니다. getUrl()은 Google이 지정하는 형식으로 url을 반환하는 메소드입니다. "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)을 권장하는 것으로 보입니다. 나는 이클립스를 사용하지 않고 어떤 gui/wizard/plugin-thing 없이도이 도구를 사용하여 일반적으로 쉽게 달성 할 수있는 일을 피하고 싶다.

내 자바 서블릿은 봄에 기록되고 내 응용 프로그램의 설정은 다음과 같이 보입니다 :이 같은

@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> 

어떤 방법이 있다는 것을 I 내 AppConfig.java + persistence.xml을 수정하여 Google Cloud SQL에서이 작업을 수행 할 수 있습니까? 언급했듯이 이클립스 플러그인을 건너 뛰고 싶다.

+0

특정 구성없이 작동해야하며 Google Cloud SQL을 사용하여 현재 구성을 테스트 했습니까? 어떤 오류가 있었습니까? –

+0

mvn appengine : deploy를 사용하여 배포합니다. 그 후 Java에서 sql을 사용하여 데이터를 저장하는 나머지 서비스를 호출 해보십시오. 정상적으로 작동합니다. 그 후에 entitymanager를 사용하는 휴식 서비스를 호출하여 "HibernateException : JDBC 연결을 만들 수 없습니다"라는 결과를 보게됩니다. 똑같은 연결 고리. –

답변

1

AppEngine을 사용하는 경우 https://cloud.google.com/sql/docs/app-engine-connecthttps://cloud.google.com/appengine/docs/java/cloud-sql/을 읽고 싶을 수 있습니다.

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

, 자신의 예제에 설명 된대로 Google 클라우드 SQL 드라이버를 사용하지 않고 Google 클라우드 SQL 인스턴스에 연결을 시도하지만,이 드라이버를 필요로하는 구글의 연결 문자열에있는 것 같다

그래서 연결 문자열이 인식되지 않습니다 (그리고 PostgreSQL 드라이버가 도움이되지 않습니다).

AppEngine을 사용하지 않는 경우 표준 MySQL 연결 (인스턴스 이름 대신 호스트, 포트 등)과 마찬가지로 MySQL 드라이버로 전환하고 연결 문자열에서 "google"을 제거하십시오.