2016-12-10 13 views
0

私のspringbootアプリケーションは、2つのデータソース(emwbisとbackupemwbis)からデータを読み込もうとします。私は2つの異なるデータソースからデータを読み込むために私のspringbootアプリケーションを設定する際に以下のリンクをたどってきました。springbootは常にプライマリデータソースからデータを読み込みます

http://www.baeldung.com/spring-data-jpa-multiple-databases

私のアプリでは、現在の問題は、それが常にプライマリデータソース(emwbis)からデータを読み取っています。私はコードの下に書いた。プライマリとバックアップデータソースの

モデルクラス:プライマリとバックアップデータソースの

package com.jl.models.primary; 
@Entity 
@Table(name = "crsbis",schema="emwbis") 
@Data 
public class CrsBIS { 

    @Id 
    private String id; 

    @NotNull 
    private String email; 

package com.jl.models.backup; 

import lombok.Data; 

@Entity 
@Table(name = "crsbis",schema="backupemwbis") 
@Data 
public class CrsBIS { 

    @Id 
    private String id; 

    @NotNull 
    private String email; 

データソース設定クラス:プライマリとバックアップデータソースの

@Configuration 
@PropertySource("classpath:persistence-multiple-db.properties") 
@EnableJpaRepositories(basePackages = "com.jl.dao.backup", entityManagerFactoryRef = "crsBISBackUpEntityManager", transactionManagerRef = "crsBISBackupTransactionManager") 
public class BackupCrsBISDatabaseConfig { 

@Configuration 
@PropertySource("classpath:persistence-multiple-db.properties") 
@EnableJpaRepositories(basePackages = "com.jl.dao.primary", entityManagerFactoryRef = "crsBISEntityManager", transactionManagerRef = "crsBISTransactionManager") 
public class CrsBISDatabaseConfig { 

リポジトリインターフェース:

@Transactional 
public interface CrsBISRepository extends JpaRepository<CrsBIS, String> { 
    public CrsBIS findById(String id); 

} 

@Transactional 
public interface CrBisBackupRepository extends JpaRepository<CrsBIS, String>{ 
    public CrsBIS findById(String id); 
} 

永続的なデータベースプロファイル:

jdbc.driverClassName=com.mysql.jdbc.Driver 
crsbis.jdbc.url=jdbc:mysql://localhost:3306/emwbis 
backupcrsbis.jdbc.url=jdbc:mysql://localhost:3306/backupemwbis 
jdbc.user=root 
jdbc.pass=Password1 

Controllerクラスのデータソースの両方をテストするために:私は、コントローラクラスのヒットで両方の方法、モデルクラスにし、データベース構成ファイル内のデータベース・スキーマを分離しました、が

@Controller 
public class CrsBISController { 

    @Autowired 
    private CrsBISRepository crsBISRepository; 

    @Autowired 
    private CrBisBackupRepository crsBackupRepository; 

@RequestMapping("/get-by-id") 
    @ResponseBody 
    public String getById(String id){ 
     String email=""; 
     try{ 
      CrsBIS crsBIS = crsBISRepository.findById(id); 
      email = String.valueOf(crsBIS.getEmail()); 
     }catch (Exception e) { 
      e.printStackTrace(); 
      return "id not found!"; 
     } 
     return "The email is : "+email; 
    } 

    @RequestMapping("/get-by-id-backup") 
    @ResponseBody 
    public String getByIdFromBackup(String id){ 
     String email=""; 
     try{ 
      com.jl.models.backup.CrsBIS crsBIS = crsBackupRepository.findById(id); 
      email = String.valueOf(crsBIS.getEmail()); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      return "id not found!"; 
     } 
     return "The email is : "+email; 
    } 

を同じデータベース(emwbis)。コントローラクラスのgetByIdFromBackupメソッドでセカンダリデータベース(backupemwbis)からデータを読み取るようにします。

私のコードで間違いを知らせてもらえますか?または私の目標を達成するために私を提案/誘導することができますか?あなたが名前MyDatasourceの一次データソースのBean定義を作成していると第二のemfにあなたがしている最初のコンフィギュレーション・ファイルから

@Transactional("crsBISTransactionManager") 
//.. 

@Transactional("crsBISBackupTransactionManager") 
//.. 
+0

あなたのentityManagerFactory設定を投稿してください。 –

+1

こんにちはアレックス、私はここにコピー:pastebin.com/FmKKw81f – harshavmb

+0

こんにちは! 1つの質問:2つのモデルクラスと2つのリポジトリを作成する必要がありますか?豆の作り方にこのフォールバックを設定する方法はありますか? – multiplayer1080

答えて

1

:あなたが明示的にあなたの@Transactional使用量のTransactionManager実装を要求する必要が

0

同じデータソース参照を注入します。問題を引き起こして ビーンちょうど二ビーンのデータソース名を変更し、第二EMFでそれを使用するこの

@Bean 
@Primary 
public DataSource myDataSource() 

です。

public class BackupCrsBISDatabaseConfig { 

    ... 
    @Bean 
    public DataSource backupDS() { 
    .... 

    @Bean 
    public LocalContainerEntityManagerFactoryBean crsBISBackUpEntityManager() { 
     .... 
     em.setDataSource(backupDS()); 
    } 
} 

希望します。

+0

これを試してもプライマリデータベースから読み取っています。: – harshavmb

+0

entityManager-sとtransactionManager-sの定義を共有してもよろしいですか? – dimitrisli

+0

エンティティとトランザクションクラスはここにあります: http://pastebin.com/FmKKw81f – harshavmb

関連する問題