Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有相似模式的Spring多数据源_Java_Postgresql_Spring Boot_Spring Data_Datasource - Fatal编程技术网

Java 具有相似模式的Spring多数据源

Java 具有相似模式的Spring多数据源,java,postgresql,spring-boot,spring-data,datasource,Java,Postgresql,Spring Boot,Spring Data,Datasource,我在PostgreSQL上有4个具有类似模式的数据库 我现在的代码是这样的 资源 spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=postgres spring.db1.url=jdbc:postgresql://db1:5432/postgres spring.db1.username=p

我在PostgreSQL上有4个具有类似模式的数据库

我现在的代码是这样的

资源

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
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
DAO

public interface AccountRepository extends JpaRepository<Account, Long>{}
控制器

@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 Page<Account> getAccounts(Integer page, Integer size, string env) {
    return accountService.getAll(page, size, env);
}
...
控制器

@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 Page<Account> getAccounts(Integer page, Integer size, string env) {
    return accountService.getAll(page, size, env);
}
...
。。。
公共页面getAccounts(整型页面、整型大小、字符串环境){
returnaccountservice.getAll(页面、大小、环境);
}
...
服务

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);
    }
}
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
    }
}
公共类AccountService{
公共帐户服务(地图mapAccountRepository){
this.mapAccountRepository=mapAccountRepository;
}
公共页getAll(整型页、整型大小、字符串环境){
PageRequest PageRequest=新的PageRequest(页面,大小);
//在特定环境中搜索
}
}
如何加载4个数据源(可能在地图上)并按环境进行搜索! 如果我发送env=db1,我想在db1上运行我的请求

如果您有其他解决方案,我就采用它,但必须使用一个存储库和一个实体来搜索所有数据库


谢谢:)

根据您的评论,您需要一个存储库实例在不同的模式之间切换

这行不通

您可以做的是为多个存储库实例提供一个门面,根据一些参数/字段/属性将每个调用委托给多个实例中的一个


但无论如何,您必须为每个存储库创建一个单独的存储库实例,并使用不同的数据库连接。

根据您的评论,您需要一个存储库实例在不同的模式之间切换

这行不通

您可以做的是为多个存储库实例提供一个门面,根据一些参数/字段/属性将每个调用委托给多个实例中的一个


但是,无论如何,您必须创建一个单独的存储库实例,每个实例具有不同的数据库连接。

您所描述的是使用多个数据库的多租户。 要做到这一点,您需要手动配置持久层,而不是完全依赖
springboot
自动配置功能

持久层配置包括:

  • Hibernate、JPA和数据源属性
  • 数据源bean
  • 实体管理器工厂bean(对于Hibernate,属性指定这是一个多租户实体管理器工厂bean和租户连接提供程序以及租户解析程序)
  • 事务管理器bean
  • Spring数据JPA和事务支持配置

在我最近发表的一篇博文中:我将详细介绍这个问题。

您所描述的是使用多个数据库的多租户。 要做到这一点,您需要手动配置持久层,而不是完全依赖
springboot
自动配置功能

持久层配置包括:

  • Hibernate、JPA和数据源属性
  • 数据源bean
  • 实体管理器工厂bean(对于Hibernate,属性指定这是一个多租户实体管理器工厂bean和租户连接提供程序以及租户解析程序)
  • 事务管理器bean
  • Spring数据JPA和事务支持配置

在我最近发表的一篇博文中:我将详细介绍这个问题。

这将有助于。。我尝试这个例子,但我需要使用单存储库(而不是多存储库和多配置)您的问题是什么?你想要实现什么?如果你想改变你的资源,就这么做吧。我的问题是如何加载4个数据源(可能在地图上)并按环境进行搜索!如果我发送env=db1并在db1上运行我的请求,多租户方法会在这方面起作用吗?这会有帮助的。。我尝试这个例子,但我需要使用单存储库(而不是多存储库和多配置)您的问题是什么?你想要实现什么?如果你想改变你的资源,就这么做吧。我的问题是如何加载4个数据源(可能在地图上)并按环境进行搜索!如果我发送env=db1并在db1上运行我的请求,多租户方法会在这方面起作用吗?