我试图在我的项目中实现具有数据库分离的多租户架构。一切看起来都很好,但我想在运行时添加新的租户,而且我坚持使用它。 我在我的项目中使用liquibase,当添加租户时,必须在运行时发生三件事:
创建新数据库
创建新的DataSource Bean
使用liquibase更新数据库
使用SpringLiquibase Bean创建和更新我新创建的数据库没有问题。我正在做这样的事情:
public void registerTenantBean(String tenantName){
BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) applicationContext.getAutowireCapableBeanFactory();
Properties properties = ... //set my properties
DataSourceBuilder dataSourceBuilder = new DataSourceBuilder(this.getClass().getClassLoader())
.driverClassName(properties.getDriverClassName())
.url(properties.getUrl())
.username(properties.getUsername())
.password(properties.getPassword());
DataSource ds = dataSourceBuilder.build();
BeanDefinition liquibaseDefinition = BeanDefinitionBuilder
.genericBeanDefinition(TenantLiquibase.class)
.addConstructorArgReference(ds)
.setScope(BeanDefinition.SCOPE_SINGLETON)
.getBeanDefinition();
beanFactory.registerBeanDefinition(tenantName + "LiquibaseBean", liquibaseDefinition);
}
我的TenantLiquibase简单地说:
public class TenantLiquibase extends SpringLiquibase {
public TenantLiquibase(DataSource dataSource) {
super.setDataSource(dataSource);
super.setChangeLog("classpath:/db/changelog/db.changelog-master.json");
}
}
这很好用,但我不知道如何将我的数据源ds
注册为Spring IoC的数据源配置属性。是否有可能以某种方式在这个代码处做到这一点?