我在PostgreSQL上有4个类似模式的数据库
我现在的密码是这样的
资源
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
刀
public interface AccountRepository extends JpaRepository<Account, Long>{}
配置
@Configuration
public class AccountServiceConfiguration {
@Autowired
private AccountRepository accountRepository;
@Bean
public AccountService accountService() {
return new AccountService(accountRepository);
}
}
控制器
@RestController
@RequestMapping("/accounts")
public class AccountController {
@Autowired
private AccountService accountService;
@RequestMapping(name = "/", method = RequestMethod.GET)
public Page<Account> getAccounts(Integer page, Integer size) {
return accountService.getAll(page, size);
}
}
服务
public class AccounttService {
public AccounttService(AccountRepository accountRepository) {
this.accountRepository = accountRepository;
}
public Page<Account> getAll(Integer page, Integer size) {
PageRequest pageRequest = new PageRequest(page, size);
return accountRepository.findAll(pageRequest);
}
}
我想这样改变
资源
spring.db1.url=jdbc:postgresql://db1:5432/postgres
spring.db1.username=postgres1
spring.db1.password=postgres1
spring.db2.url=jdbc:postgresql://db2:5432/postgres
spring.db2.username=postgres2
spring.db2.password=postgres2
spring.db3.url=jdbc:postgresql://db3:5432/postgres
spring.db3.username=postgres3
spring.db3.password=postgres3
spring.db4.url=jdbc:postgresql://db4:5432/postgres
spring.db4.username=postgres4
spring.db4.password=postgres4
控制器
...
public Page<Account> getAccounts(Integer page, Integer size, string env) {
return accountService.getAll(page, size, env);
}
...
服务
public class AccounttService {
public AccounttService(Map<AccountRepository> mapAccountRepository) {
this.mapAccountRepository = mapAccountRepository;
}
public Page<Account> getAll(Integer page, Integer size, String env) {
PageRequest pageRequest = new PageRequest(page, size);
// search in specific env
}
}
如何加载4个数据源(可能在地图上)并按环境搜索!
如果我发送env=db1,我想在db1上运行我的请求
如果您有其他解决方案,我接受它,但必须使用一个存储库和一个实体在所有数据库中搜索。
谢谢:)
最佳答案
根据您的评论,您希望单个存储库实例在不同的模式之间切换。
这行不通。
您可以做的是为多个存储库实例提供一个Facade,根据一些参数/字段/属性将每个调用委托给多个实例。
但不管怎样,您都必须创建一个单独的存储库实例,每个实例都有不同的数据库连接。