我正在创建一个spring引导应用程序,它应该支持多租户、独立的数据库方法。每个租户将使用多个模式,并从某个配置文件中动态加载。租户和模式是这样的,
租户1:
url : dbc:mysql://dns1/abc_schema
username : sa
password : sa
url : dbc:mysql://dns1/pqr_schema
username : sa
password : sa
url : dbc:mysql://dns1/xyz_schema
username : sa
password : sa
租户2:
url : dbc:mysql://dns2/abc_schema
username : sa
password : sa
url : dbc:mysql://dns2/pqr_schema
username : sa
password : sa
url : dbc:mysql://dns2/xyz_schema
username : sa
password : sa
目前它是一个单租户应用程序,其中application.properties中提到了所有3个模式。所有数据库示例都有相同的模式名,但在不同的数据库示例中。现在,有3个单独的带有@configuration的配置文件在应用程序启动时加载表。
我正在将此应用程序转换为多租户应用程序。实现多租户应用程序的步骤很清楚,租户只有一个模式,但是我有多个租户模式。所以,问题是什么时候实施 AbstractDataSourceBasedMultiTenantConnectionProviderImpl
班级, selectDataSource()
函数返回单个数据源。但是如何传递其中的多个模式呢?
@Override
protected DataSource selectDataSource(String tenantIdentifier) {
if (isInitialLoad) {
isInitialLoad = false;
TenantDataSource tenantDataSource = context.getBean(TenantDataSource.class);
map.putAll(tenantDataSource.getAll());
}
return map.get(tenantIdentifier);
}
先谢谢你,谢尔兹
1条答案
按热度按时间9gm1akwq1#
这只是给出的方法,不完全是解决方案
定义路由器,如下所示,然后您可以在配置中设置
我们需要一个到数据源对象的上下文Map来配置abstractroutingdatasource。如果没有上下文集,我们还可以指定要使用的默认数据源。
我们使用的数据源可以来自任何地方,但通常会在运行时创建或使用jndi查找:
@Configuration 公共类routingtestconfiguration{
}
查看更多信息-baeldung
另一种解决方案定义如下
多租户模型在应用程序中实现多租户有几种模型:
每个租户的数据库每个租户都有自己的数据库,并与其他租户隔离。
共享数据库,单独的模式(这就是我们要找的)
所有租户共享一个数据库,但有自己的数据库模式和表。
共享数据库,共享模式所有租户共享一个数据库和表。每个表都有一个带有租户标识符的列,该列显示行的所有者。
例子:
或者只有一个选择也存在
租户一
租户二
然后为每个类创建propertysource类,然后它将由spring设置,然后您就可以使用它们了
选中此链接并在此处输入链接描述