spring - 自定义数据源 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...
有没有一种通用和更有效的方法来做到这一点?如果将来添加新合作伙伴时,我们可以在应用程序属性中指定配置并使其正常工作?
解决方案
您可以使用 Spring Boot 多租户模型,为每个客户端使用单独的数据库。您可以将数据库配置保存在 config-properties 或数据库中,然后根据 ClientId 您可以作为数据源。您需要添加拦截器来拦截请求并识别租户。请参考以下示例
请检查
推荐阅读
- c# - 如何在下面的代码中应用 oops 以减少冗余代码?
- html - Django分页计数不断增加
- r - r regex 删除括号前后的所有字符
- mysql - Partitioning by range columns unexpected behavior
- haskell - 如何使此代码与 Integer-> Int 类型签名一起使用?
- javascript - reactJs同时使用onMouseDown和onMouseMove在按住鼠标按钮的同时选择多个元素?
- php - 使用表查询和选择函数以检测不同列的时间戳并使用 json 发送
- python - 基于 pandas DataFrame Key Column 的动态文件名
- arrays - 以特定大小拆分数组
- c - 如何在c中打印libpari版本?