在多租户应用程序中动态添加租户后,带有访问域对象 我正在使用Grails 3.3.18中的每个租户方法开发多租户应用程序。当我动态添加租户时,新的房客模式将成功创建。但是,当我说...

问题描述 投票:0回答:0
在我的自定义schemahandler(mysqlschemahandler)中,我实现了ResolvesCheManames方法,并且在返回列表中定义的任何模式都可以正确设置并正常工作。仅当我尝试在添加新租户后从动态创建的架构中读取数据时,就会出现问题。 我正在使用Mariadb后端,并为其准备了一个schemahandler,如下所述:

class MySQLSchemaHandler extends DefaultSchemaHandler { MySQLSchemaHandler() { super("USE `%s`", "CREATE SCHEMA `%s`", "contact_app") } @Override Collection<String> resolveSchemaNames(DataSource dataSource) { return ['tenant00'] } }

这是注册新租户并为租户创建新架构的代码的片段部分。

Company save(Company company, Boolean registerTenant = false) { company.save(flush: true) log.info("company record ${company} was created successfully"); if(registerTenant) { this.registerTenantDatastore(company); } return company; } HibernateDatastore registerTenantDatastore(Company company) { hibernateDatastore.addTenantForSchema(company.tenantId); log.info("tenants=[${company.tenantId}] was added successfully..."); return hibernateDatastore }

我们正在运行一个带有数据库的多租户应用程序。显然可能存在差异。无论如何,在创建新数据库之后,我们既添加了Conection源和听众:

{ DatabaseConfiguration databaseConfiguration = findDatabaseConfigurationByShortName(shortName) hibernateDatastore.connectionSources.addConnectionSource(databaseConfiguration.dataSourceName, databaseConfiguration.configuration) addTenantListener(new TenantUserPasswordEncoderListener(getTenantDataStore(databaseConfiguration.dataSourceName))) } HibernateDatastore getTenantDataStore(String tenantName) { HibernateDatastore tenantDatastore = hibernateDatastore.getDatastoreForConnection(tenantName) log.info("getTenantDataStore($tenantName) == $tenantDatastore") tenantDatastore } @CompileDynamic boolean addTenantListener(AbstractPersistenceEventListener listener) { log.debug("(${listener})") boolean result = false getGrailsApplication().mainContext.addApplicationListener(listener) result = true log.info("(${listener}) == ${result}") result } DatabaseConfiguration findDatabaseConfigurationByShortName(String shortName) { log.trace("findDatabaseConfigurationByShortName(${shortName})") DatabaseConfiguration result = new DatabaseConfiguration(dataSourceName: shortName, configuration: configurationByShortName(shortName)) log.debug("findDatabaseConfigurationByShortName($shortName) .result.url == ${result.configuration.get('url')}") result }


hibernate grails grails-orm multi-tenant
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.