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.system.service.SysDictApiService;
import com.qiaoba.api.tenant.entity.SysTenant; import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.param.SysTenantParam; 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.api.tenant.utils.TenantUtil;
import com.qiaoba.common.base.constant.TenantConstant; import com.qiaoba.common.base.constant.TenantConstant;
import com.qiaoba.common.base.context.BaseContext; 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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
@ -29,9 +30,7 @@ import java.util.List;
public class SyncDataToCacheRunner implements ApplicationRunner { public class SyncDataToCacheRunner implements ApplicationRunner {
private final SysTenantApiService sysTenantApiService; private final SysTenantApiService sysTenantApiService;
private final SysConfigService sysConfigService; private final SysTenantInitService sysTenantInitService;
private final SysDictApiService sysDictApiService;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
@ -46,18 +45,7 @@ public class SyncDataToCacheRunner implements ApplicationRunner {
} }
for (SysTenant sysTenant : sysTenantList) { for (SysTenant sysTenant : sysTenantList) {
try { sysTenantInitService.syncTenantData2Cache(sysTenant);
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();
}
} }
} }

View File

@ -1,5 +1,6 @@
package com.qiaoba.module.tenant.service; 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.TenantInitCheckVo;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo; import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
@ -45,4 +46,11 @@ public interface SysTenantInitService {
* @param tenantId 租户ID * @param tenantId 租户ID
*/ */
void initCompleted(String tenantId); 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 com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
@ -43,6 +44,7 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void changePrimaryDatasource(String tenantId, String datasourceId) { public void changePrimaryDatasource(String tenantId, String datasourceId) {
// 将该数据源设置为主要数据源 // 将该数据源设置为主要数据源
SysTenantDatasource sysTenantDatasource = new SysTenantDatasource(); SysTenantDatasource sysTenantDatasource = new SysTenantDatasource();

View File

@ -1,15 +1,20 @@
package com.qiaoba.module.tenant.service.impl; package com.qiaoba.module.tenant.service.impl;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.alibaba.druid.pool.DruidDataSource; 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.SysTenant;
import com.qiaoba.api.tenant.entity.SysTenantDatasource; import com.qiaoba.api.tenant.entity.SysTenantDatasource;
import com.qiaoba.api.tenant.enums.TenantModeEnum; 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.DatasourceErrorCode;
import com.qiaoba.common.base.code.TenantErrorCode; import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.constant.BaseConstant; 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.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum; import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exception.ServiceException; 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.InitDataUtil;
import com.qiaoba.module.tenant.util.MenuUtil; import com.qiaoba.module.tenant.util.MenuUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.sql.DataSource; import javax.sql.DataSource;
@ -43,10 +49,13 @@ import java.util.Objects;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class SysTenantInitServiceImpl implements SysTenantInitService { public class SysTenantInitServiceImpl implements SysTenantInitService {
private final SysTenantService sysTenantService; private final SysTenantService sysTenantService;
private final SysTenantDatasourceService sysTenantDatasourceService; private final SysTenantDatasourceService sysTenantDatasourceService;
private final SysConfigApiService sysConfigApiService;
private final SysDictApiService sysDictApiService;
@Override @Override
public TenantInitCheckVo check(String tenantId) { public TenantInitCheckVo check(String tenantId) {
@ -164,10 +173,28 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
public void initCompleted(String tenantId) { public void initCompleted(String tenantId) {
int result = sysTenantService.initCompleted(tenantId); int result = sysTenantService.initCompleted(tenantId);
if (result > BaseConstant.HANDLE_ERROR) { 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) { private void checkInitialized(SysTenant sysTenant) {
if (BaseEnum.YES.getCode().equals(sysTenant.getInitialized())) { if (BaseEnum.YES.getCode().equals(sysTenant.getInitialized())) {
throw new ServiceException(TenantErrorCode.INITIALIZED.getCode(), TenantErrorCode.INITIALIZED.getMsg()); throw new ServiceException(TenantErrorCode.INITIALIZED.getCode(), TenantErrorCode.INITIALIZED.getMsg());