我的springboot應用程序嘗試從兩個數據源(emwbis和backupemwbis)讀取數據。我已經按照下面的鏈接配置我的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;
DataSource配置類主要和備份數據源:
@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);
}
持久性db proeprties文件:
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
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)中的數據。
有人可以讓我知道我的代碼中的錯誤嗎?或者你可以建議/指導我實現我的目標?
請發佈您的entityManagerFactory配置。 –
嗨,亞歷克斯,我把它們複製到這裏:pastebin.com/FmKKw81f – harshavmb
嗨!一個問題:你需要創建兩個模型類和兩個存儲庫嗎?有一種方法可以在bean構建中配置這個回退功能嗎? – multiplayer1080