add
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
|
Reference in New Issue
Block a user