diff --git a/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java b/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java new file mode 100644 index 0000000..c9cf094 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java @@ -0,0 +1,36 @@ +package apelet.common.online.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * common-online异步任务线程池配置。 + *

供在线表单发布生成权限字等异步任务使用。

+ * + * @author guifc + * @date 2023-08-04 + */ +@Configuration +@EnableAsync +public class OnlineAsyncConfig { + + /** + * 权限字生成/清理专用线程池。 + */ + @Bean("permCodeTaskExecutor") + public ThreadPoolTaskExecutor permCodeTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(2); + executor.setMaxPoolSize(4); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("perm-code-"); + // 队列满时由调用线程执行,避免丢弃任务。 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } +} diff --git a/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java b/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java index 45338b2..ba86a99 100644 --- a/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java +++ b/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java @@ -1,6 +1,7 @@ package apelet.common.online.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Import; /** * common-online模块的自动配置引导类。 @@ -9,5 +10,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties * @date 2023-08-04 */ @EnableConfigurationProperties({OnlineProperties.class}) +@Import(OnlineAsyncConfig.class) public class OnlineAutoConfig { } diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java new file mode 100644 index 0000000..d3225e7 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermCode; + +/** + * 权限字数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermCodeMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java new file mode 100644 index 0000000..d4075b3 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermCodePerm; + +/** + * 权限字与权限资源关系数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermCodePermMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java new file mode 100644 index 0000000..d290163 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPerm; + +/** + * 权限资源数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java new file mode 100644 index 0000000..2cb8969 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermModule; + +/** + * 权限模块数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermModuleMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java index 2896e2f..aa01b0e 100644 --- a/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java +++ b/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java @@ -11,10 +11,10 @@ import apelet.common.online.dao.OnlinePageMapper; import apelet.common.online.dao.OnlineTableMapper; import apelet.common.online.model.OnlinePage; import apelet.common.online.model.OnlineTable; -import apelet.common.online.upms.dao.OnlineSysPermCodeMapper; -import apelet.common.online.upms.dao.OnlineSysPermCodePermMapper; -import apelet.common.online.upms.dao.OnlineSysPermMapper; -import apelet.common.online.upms.dao.OnlineSysPermModuleMapper; +import apelet.common.online.upms.dao.SysPermCodeMapper; +import apelet.common.online.upms.dao.SysPermCodePermMapper; +import apelet.common.online.upms.dao.SysPermMapper; +import apelet.common.online.upms.dao.SysPermModuleMapper; import apelet.common.online.upms.model.SysPerm; import apelet.common.online.upms.model.SysPermCode; import apelet.common.online.upms.model.SysPermCodePerm; @@ -27,7 +27,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PreDestroy; import java.util.*; @@ -86,12 +88,15 @@ public class OnlinePermCodeServiceImpl implements OnlinePermCodeService { private OnlineSysPermCodeMapper onlineSysPermCodeMapper; @Autowired private OnlineSysPermCodePermMapper onlineSysPermCodePermMapper; + @Autowired private IdGeneratorWrapper idGenerator; /** * 发布后异步生成权限字,先生成前先清理旧数据保证幂等。 */ + @Async("permCodeTaskExecutor") + @Transactional(rollbackFor = Exception.class) @Override public void genPermCodeByPageId(Long pageId, Long userId) { permCodeExecutor.execute(() -> { @@ -110,6 +115,8 @@ public class OnlinePermCodeServiceImpl implements OnlinePermCodeService { /** * 删除表单后异步清理权限字相关数据。 */ + @Async("permCodeTaskExecutor") + @Transactional(rollbackFor = Exception.class) @Override public void removePermCodeByPageCode(String pageCode) { permCodeExecutor.execute(() -> {