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.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
@ -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());
|
||||||
|
Reference in New Issue
Block a user