自定义数据源Spring启动

时间:2019-11-23 12:39:41

标签: spring spring-boot spring-data-jpa

当使用默认数据源以及使用内置spring jpa的方式时,spring效果很好。

所以目前我们要做的是

在application.properties中指定数据库的配置

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...

是否有通用且更有效的方法?将来如果在哪里添加新的合作伙伴,我们可以在应用程序属性中指定配置并使其正常工作?

1 个答案:

答案 0 :(得分:0)

您可以对每个客户端使用单独的数据库来使用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