チュートリアルの春BOOT2シリーズ(二十から五)春ブーツが複数のデータソースJPAを統合

この記事では最後の春ブーツは主に誰とマルチソースのデータ統合問題の春ブーツJPAの話に、ソリューションの永続データを統合しています。春ブーツ統合JbdcTemplate複数のデータソースでは、春ブーツは最も構成するときにMyBatisのと春ブーツはJPAのこれら3点の知識、JPAは最も複雑とみなさ複数のデータソースを統合するだけでなく、多くの人々が複数のデータソースを統合し、複数のデータソースを統合します障害の簡単タイプ。この記事と誰もがソングのGeチュートリアル、ステップバイステップJPAは、複数のデータソースを統合するに従います。

プロジェクトの作成

まず、以下のように、基本的なWeb、JPAを追加するとMySQLに依存している、春ブーツプロジェクトを作成作成することです:

作成したら、ドルイド依存性を追加し、ここに春ブーツドルイドのために作られた使用に関する上記の要件に、誰もがこの依存性はDruidDataSourceBuilderを持っているので、複数のデータソースの統合が最終的に、この依存関係を使用する必要がある場合ことを発見したかもしれませんまた、ほとんどの人はまだ8.xのではなく、MySQLの5.xのを使用する可能性があるため、バージョン依存のデータベースをロックすることを忘れないでください 完全な信頼次のように:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.28</version>
    <scope>runtime</scope>
</dependency>

だから、このプロジェクトの成功は、作成された後。

基本構成

基本構成では、私たち最初のconfigure複数のデータソースと同様に基本的な情報のデータソースは、最初に以下の構成情報application.propertiesを追加します。

#  数据源一
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.url=jdbc:mysql:///test01?useUnicode=true&characterEncoding=UTF-8
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

#  数据源二
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.url=jdbc:mysql:///test02?useUnicode=true&characterEncoding=UTF-8
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

# Jpa配置
spring.jpa.properties.database=mysql
spring.jpa.properties.show-sql=true
spring.jpa.properties.database-platform=mysql
spring.jpa.properties.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

次のようにここでJPAは、データソース構成を上方に配置し、マルチプロパティに同じキーに比べて、複数のデータソースの構成と前述し、次の2:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    DataSource dsOne() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource dsTwo() {
        return DruidDataSourceBuilder.create().build();
    }
}

以上、いくつかのノート春@Primaryの使用にマルチ基本的に同じである、前述の構成とデータ・ソース構成が、注意を払う、このコメントは、そのときに、特定のクラスの主な手段@、間違っていることが少なく、またはプロジェクトの開始時にあってはなりません場合、複数のインスタンス、インスタンスの優先度の使用があります。

わかりましたので、そこにデータソース。

複数のデータソース構成

次に、構成し、第一の構成を初めて目には2つのクラスでは、それぞれ2つのデータソース、基本的な情報JPAの構成、私は:

@Configuration
@EnableJpaRepositories(basePackages = "org.javaboy.jpa.dao",entityManagerFactoryRef = "localContainerEntityManagerFactoryBeanOne",transactionManagerRef = "platformTransactionManagerOne")
public class JpaConfigOne {
    @Autowired
    @Qualifier(value = "dsOne")
    DataSource dsOne;
    @Autowired
    JpaProperties jpaProperties;
    @Bean
    @Primary
    LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBeanOne(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dsOne)
                .packages("org.javaboy.jpa.model")
                .properties(jpaProperties.getProperties())
                .persistenceUnit("pu1")
                .build();
    }
    @Bean
    PlatformTransactionManager platformTransactionManagerOne(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean factoryBeanOne = localContainerEntityManagerFactoryBeanOne(builder);
        return new JpaTransactionManager(factoryBeanOne.getObject());
    }
}

まず、ここで注射dsOne、次いでJpaPropertiesに、JpaPropertiesデータは我々がapplication.propertiesに構成JPA関連する構成内にあるシステムによって提供された例です。その後、我々は、2ビーンを提供MyBatisのとJdbcTemplateとは異なり、JPAでは、トランザクションが設定されている必要があり、LocalContainerEntityManagerFactoryBeanとPlatformTransactionManagerトランザクションマネージャです。LocalContainerEntityManagerFactoryBeanが提供される場合、パッケージを指定する必要があり、このパッケージのパッケージは、対応するエンティティクラスは、@EnableJpaRepositoriesによって配置、構成クラスが本明細書に指定された位置は、それぞれの注釈をDAO、および指定されたデータソースが位置LocalContainerEntityManagerFactoryBeanとPlatformTransactionManagerに対応します名参照。

さて、構成された第1、第2のベースと同様のように、いくつかの違いがあります。

  • 異なる場所ダオ
  • 異なるpersistenceUnit
  • 豆に関連する別の名前

エンティティ・クラスが共有することができることに注意してください。

コードは以下の通りであります:

@Configuration
@EnableJpaRepositories(basePackages = "org.javaboy.jpa.dao2",entityManagerFactoryRef = "localContainerEntityManagerFactoryBeanTwo",transactionManagerRef = "platformTransactionManagerTwo")
public class JpaConfigTwo {
    @Autowired
    @Qualifier(value = "dsTwo")
    DataSource dsTwo;
    @Autowired
    JpaProperties jpaProperties;
    @Bean
    LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBeanTwo(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dsTwo)
                .packages("org.javaboy.jpa.model")
                .properties(jpaProperties.getProperties())
                .persistenceUnit("pu2")
                .build();
    }
    @Bean
    PlatformTransactionManager platformTransactionManagerTwo(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean factoryBeanTwo = localContainerEntityManagerFactoryBeanTwo(builder);
        return new JpaTransactionManager(factoryBeanTwo.getObject());
    }
}

次は、それぞれが対応する位置関連のエンティティ・クラスとDAOに設けられ、データ・ソースは、DAOは、以下であります:

package org.javaboy.jpa.dao;
public interface UserDao extends JpaRepository<User,Integer> {
    List<User> getUserByAddressEqualsAndIdLessThanEqual(String address, Integer id);
    @Query(value = "select * from t_user where id=(select max(id) from t_user)",nativeQuery = true)
    User maxIdUser();
}

DAOは、次の2つのデータソース:

package org.javaboy.jpa.dao2;
public interface UserDao2 extends JpaRepository<User,Integer> {
    List<User> getUserByAddressEqualsAndIdLessThanEqual(String address, Integer id);

    @Query(value = "select * from t_user where id=(select max(id) from t_user)",nativeQuery = true)
    User maxIdUser();
}

次のように一般的なエンティティクラスは以下のとおりです。

package org.javaboy.jpa.model;
@Entity(name = "t_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String address;
    //省略getter/setter
}

これは、すべての設定が完了した場合でも、次の注入は異なるUserDaoサービス、異なるデータソースUserDaoの異なる操作にすることができます。

実際には、複数のデータソースの統合はJPAであることを、あまりにも難しいことではない、いくつかの詳細があり、解決これらの問題の詳細については、実際には、複数の他のデータソースは、先に述べたよりは全体に類似しています。

さて、この記事では、ここでご紹介します。

関連例はGitHubのにアップロードされた、小さなお友達は、ダウンロードに歓迎されていますhttps://github.com/lenve/javaboy-code-samples

歌Geのスキャンコード懸念し、公共の数の舞台裏返信2TB、歌Geが排他的な超乾燥2TBフリーのJavaの学習を取得します

おすすめ

転載: www.cnblogs.com/lenve/p/11910161.html