2016-12-21 6 views
0

JavaからGoogle Cloud SQLデータベースに接続できました。現在、私はこれを次のように確認しています。Google Cloud SQL + JPA with 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)をお勧めしているようです。私はEclipseを使用していないので、通常はGUI /ウィザード/プラグインなしで達成するのが非常に簡単な何かのためにこのツールを使用しないでください。

私の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> 

がどのような方法があることをI AppConfig.java + persistence.xmlを変更してGoogle Cloud SQLと連携させることができますか?前述のとおり、私はEclipse Pluginをスキップしています。

+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/としてください。ここで

、彼らのサンプルで説明したようにあなたは、GoogleのクラウドSQLドライバを使用せずに、しかし、このドライバを必要とし、Googleの接続文字列でのGoogle Cloud SQLインスタンスに接続しようとしているようだ:

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

あなたの接続文字列は認識されません(PostgreSQLドライバは役に立ちません)。

AppEngineを使用していない場合は、標準のMySQL接続(インスタンス名ではなくホスト、ポートなど)と同様に、MySQLドライバに切り替えて接続文字列で「google」を削除します。