首页 > 解决方案 > 自定义数据源 Spring boot

问题描述

当我们使用默认数据源以及我们可以使用内置 spring jpa 的方式时,spring 运行良好。

所以目前我们做的是以下

在 application.properties 中指定 DB 的配置

myapp.datasource.url=jdbc:mysql:thin:@localhost:1521:myschema
myapp.datasource.username=user
myapp.datasource.password=password
myapp.datasource.driver-class=com.mysql.cj.jdbc.Driver

自定义数据源

@ConfigurationProperties(prefix = "myapp.datasource")
@Bean
public DataSource mySqlDataSource() 
{
    return DataSourceBuilder.create().build();
}

我们为多个客户端运行相同的应用程序。问题是每个客户端都有自己的数据库模式。

所以,现在的问题是我们需要能够为每个客户端提供服务,但是为了做到这一点,我们需要创建多个数据源,例如:

@ConfigurationProperties(prefix = "myapp.partner1.datasource")
@Bean
public DataSource mySqlDataSourcePartner1() 
{
    return DataSourceBuilder.create().build();
}

@ConfigurationProperties(prefix = "myapp.partner2.datasource")
@Bean
public DataSource mySqlDataSourcePartner2() 
{
    return DataSourceBuilder.create().build();
}

@ConfigurationProperties(prefix = "myapp.partner3.datasource")
@Bean
public DataSource mySqlDataSourcePartner3() 
{
    return DataSourceBuilder.create().build();
}

and so on...

有没有一种通用和更有效的方法来做到这一点?如果将来添加新合作伙伴时,我们可以在应用程序属性中指定配置并使其正常工作?

标签: springspring-bootspring-data-jpa

解决方案


您可以使用 Spring Boot 多租户模型,为每个客户端使用单独的数据库。您可以将数据库配置保存在 config-properties 或数据库中,然后根据 ClientId 您可以作为数据源。您需要添加拦截器来拦截请求并识别租户。请参考以下示例

https://tech.asimio.net/2017/01/17/Multitenant-applications-using-Spring-Boot-JPA-Hibernate-and-Postgres.html

请检查

https://github.com/sumanentc/multitenant


推荐阅读