This commit is contained in:
2023-07-14 15:43:13 +08:00
parent c5eb3c09d6
commit 2a2ad20bba
4 changed files with 43 additions and 18 deletions

View File

@ -1,5 +1,6 @@
package com.qiaoba.module.system.runner;
package com.qiaoba.module.tenant.runner;
import com.qiaoba.api.system.service.SysConfigApiService;
import com.qiaoba.api.system.service.SysDictApiService;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
@ -7,7 +8,7 @@ import com.qiaoba.api.tenant.service.SysTenantApiService;
import com.qiaoba.api.tenant.utils.TenantUtil;
import com.qiaoba.common.base.constant.TenantConstant;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.module.system.service.SysConfigService;
import com.qiaoba.module.tenant.service.SysTenantInitService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
@ -29,9 +30,7 @@ import java.util.List;
public class SyncDataToCacheRunner implements ApplicationRunner {
private final SysTenantApiService sysTenantApiService;
private final SysConfigService sysConfigService;
private final SysDictApiService sysDictApiService;
private final SysTenantInitService sysTenantInitService;
@Override
public void run(ApplicationArguments args) throws Exception {
@ -46,18 +45,7 @@ public class SyncDataToCacheRunner implements ApplicationRunner {
}
for (SysTenant sysTenant : sysTenantList) {
try {
TenantUtil.setContext(sysTenant);
// 系统配置
sysConfigService.resetConfigCache();
// 字典数据
sysDictApiService.resetDictCache();
log.info("初始化租户数据完成, 租户ID: {}", sysTenant.getTenantId());
} catch (Exception e) {
log.error("初始化租户数据完成, 租户ID: {}, 错误原因: {}", sysTenant.getTenantId(), e.getMessage());
} finally {
BaseContext.clearAllHolder();
}
sysTenantInitService.syncTenantData2Cache(sysTenant);
}
}

View File

@ -1,5 +1,6 @@
package com.qiaoba.module.tenant.service;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
@ -45,4 +46,11 @@ public interface SysTenantInitService {
* @param tenantId 租户ID
*/
void initCompleted(String tenantId);
/**
* 将租户的数据同步到缓存
*
* @param sysTenant 租户信息
*/
void syncTenantData2Cache(SysTenant sysTenant);
}

View File

@ -13,6 +13,7 @@ import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@ -43,6 +44,7 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void changePrimaryDatasource(String tenantId, String datasourceId) {
// 将该数据源设置为主要数据源
SysTenantDatasource sysTenantDatasource = new SysTenantDatasource();

View File

@ -1,15 +1,20 @@
package com.qiaoba.module.tenant.service.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.druid.pool.DruidDataSource;
import com.qiaoba.api.system.service.SysConfigApiService;
import com.qiaoba.api.system.service.SysDictApiService;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.SysTenantDatasource;
import com.qiaoba.api.tenant.enums.TenantModeEnum;
import com.qiaoba.api.tenant.utils.TenantUtil;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.constant.BaseConstant;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.base.enums.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exception.ServiceException;
@ -27,6 +32,7 @@ import com.qiaoba.module.tenant.service.SysTenantService;
import com.qiaoba.module.tenant.util.InitDataUtil;
import com.qiaoba.module.tenant.util.MenuUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.sql.DataSource;
@ -43,10 +49,13 @@ import java.util.Objects;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class SysTenantInitServiceImpl implements SysTenantInitService {
private final SysTenantService sysTenantService;
private final SysTenantDatasourceService sysTenantDatasourceService;
private final SysConfigApiService sysConfigApiService;
private final SysDictApiService sysDictApiService;
@Override
public TenantInitCheckVo check(String tenantId) {
@ -164,10 +173,28 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
public void initCompleted(String tenantId) {
int result = sysTenantService.initCompleted(tenantId);
if (result > BaseConstant.HANDLE_ERROR) {
// 缓存相关 todo
syncTenantData2Cache(sysTenantService.selectById(tenantId));
}
}
@Override
public void syncTenantData2Cache(SysTenant sysTenant) {
ThreadUtil.execAsync(()->{
try {
TenantUtil.setContext(sysTenant);
// 系统配置
sysConfigApiService.resetConfigCache();
// 字典数据
sysDictApiService.resetDictCache();
log.info("初始化租户数据完成, 租户ID: {}", sysTenant.getTenantId());
} catch (Exception e) {
log.error("初始化租户数据完成, 租户ID: {}, 错误原因: {}", sysTenant.getTenantId(), e.getMessage());
} finally {
BaseContext.clearAllHolder();
}
});
}
private void checkInitialized(SysTenant sysTenant) {
if (BaseEnum.YES.getCode().equals(sysTenant.getInitialized())) {
throw new ServiceException(TenantErrorCode.INITIALIZED.getCode(), TenantErrorCode.INITIALIZED.getMsg());