2016-05-30 9 views
1

私はバネデータJPAでプレーフレームワークを使用しています。 db1、db2、db3のような複数のデータベースに接続する必要があります。 global.javaで定義されているプレーフレームワークで複数のエンティティマネージャを使用する方法 - スプリングデータJPA?

persistence.xmlの

<persistence-unit name="db1" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>db1</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 

    </properties> 
</persistence-unit> 
<persistence-unit name="db2" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>db2</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 

    </properties> 
</persistence-unit> 
<persistence-unit name="db3" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>db3</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 

    </properties> 
</persistence-unit> 

application.conf

db.db1.driver=com.mysql.jdbc.Driver 
db.db1.url="mysql://root:[email protected]/db1?zeroDateTimeBehavior=convertToNull" 
db.db1.user="root" 
db.db1.password="root" 
db.db1.jndiName=db1 
db.db1.logSql=true 

db.db2.driver=com.mysql.jdbc.Driver 
db.db2.url="mysql://root:[email protected]/db2?zeroDateTimeBehavior=convertToNull" 
db.db2.user="root" 
db.db2.password="root" 
db.db2.jndiName=db2 
db.db2.logSql=true 

db.db3.driver=com.mysql.jdbc.Driver 
db.db3.url="mysql://root:[email protected]/db3?zeroDateTimeBehavior=convertToNull" 
db.db3.user="root" 
db.db3.password="root" 
db.db3.jndiName=db3 

春のデータ構成は、私が

@Configuration 
@EnableJpaRepositories("models") 
public static class SpringDataJpaConfiguration { 

    @Bean 
    public EntityManagerFactory entityManagerFactory() { 
     return Persistence.createEntityManagerFactory("db1"); 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 

    @Bean 
    public JpaTransactionManager transactionManager() { 
     return new JpaTransactionManager(); 
    } 
} 

今ベーターから作成したサンプルプロジェクトからそれを取りましたアプリケーションを実行すると、

と表示されます
[info] play - datasource [mysql://root:[email protected]/db1?zeroDateTimeBehavior=convertToNull] bound to JNDI as db1 
[info] play - datasource [mysql://root:[email protected]/db2?zeroDateTimeBehavior=convertToNull] bound to JNDI as db2 
[info] play - datasource [mysql://root:[email protected]/db3?zeroDateTimeBehavior=convertToNull] bound to JNDI as db3 
[info] play - database [db1] connected at jdbc:mysql://localhost/db1?zeroDateTimeBehavior=convertToNull 
[info] play - database [db2] connected at jdbc:mysql://localhost/db2?zeroDateTimeBehavior=convertToNull 
[info] play - database [db3] connected at jdbc:mysql://localhost/db3?zeroDateTimeBehavior=convertToNull 
[info] play - Application started (Dev) 

私は上記のように複数のエンティティマネージャを有効にするのに苦労していますが、db1データベースに接続することしかできません。私はglobal.javaで複数の設定を作成しようとしましたが、最後の設定で上書きされます。複数のエンティティマネージャを使用する方法を教えてください。

は次のリンクSpring Boot, Spring Data JPA with multiple DataSourcesを使用して複数のデータソースをロードしようとしましたが、それでもapplication.confファイルでエラー

play.api.UnexpectedException: Unexpected exception[UnsatisfiedDependencyException: Error creating bean with name 'attributeTypes' defined in file [/play-spring-data-jpa/target/scala-2.10/classes/controllers/catalog/AttributeTypes.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [models.repositories.data.AttributeTypeRepository]: Error creating bean with name 'attributeTypeRepository': Cannot create inner bean '(inner bean)#1b48832c' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1b48832c': Cannot resolve reference to bean 'dataEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.orm.jpa.JpaVendorAdapter models.repositories.data.DataConfig.jpaVendorAdapter; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.orm.jpa.JpaVendorAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'attributeTypeRepository': Cannot create inner bean '(inner bean)#1b48832c' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1b48832c': Cannot resolve reference to bean 'dataEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.orm.jpa.JpaVendorAdapter models.repositories.data.DataConfig.jpaVendorAdapter; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.orm.jpa.JpaVendorAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}] 
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:148) ~[play_2.10-2.2.0.jar:2.2.0] 
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10-2.2.0.jar:2.2.0] 
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na] 
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10-2.2.0.jar:2.2.0] 
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10-2.2.0.jar:2.2.0] 
at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na] 

答えて

0

を得て、このような各永続ユニットのための新しい行を追加します。

jpa.<name>=<persistence-unit-name> 

あなたの場合:

jpa.default=db1 
jpa.db2=db2 
jpa.db3=db3 
関連する問題