私の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")
//..
あなたのentityManagerFactory設定を投稿してください。 –
こんにちはアレックス、私はここにコピー:pastebin.com/FmKKw81f – harshavmb
こんにちは! 1つの質問:2つのモデルクラスと2つのリポジトリを作成する必要がありますか?豆の作り方にこのフォールバックを設定する方法はありますか? – multiplayer1080