身份源同步

pull/65/head
xiuchen 2023-10-09 15:51:42 +08:00
parent bcb48a7520
commit 3463996d02
1 changed files with 11 additions and 8 deletions

View File

@ -20,12 +20,13 @@ package cn.topiam.employee.console.synchronizer.configuration;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.ObjectUtils; import cn.topiam.employee.support.context.ApplicationContextHelp;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
@ -69,6 +70,7 @@ import cn.topiam.employee.support.scheduler.SpringSchedulerRegister;
import cn.topiam.employee.support.trace.TraceUtils; import cn.topiam.employee.support.trace.TraceUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import static cn.topiam.employee.common.enums.identitysource.IdentitySourceProvider.DINGTALK; import static cn.topiam.employee.common.enums.identitysource.IdentitySourceProvider.DINGTALK;
import static cn.topiam.employee.support.lock.LockAspect.getTopiamLockKeyPrefix; import static cn.topiam.employee.support.lock.LockAspect.getTopiamLockKeyPrefix;
@ -123,12 +125,9 @@ public class IdentitySourceBeanRegistry implements IdentitySourceEventListener {
.getBeanFactory(); .getBeanFactory();
//如果已经存在,销毁 //如果已经存在,销毁
try { try {
if (ObjectUtils if (beanFactory.containsBean(IdentitySourceBeanUtils.getSourceBeanName(id))) {
.isNotEmpty(beanFactory.getBean(IdentitySourceBeanUtils.getSourceBeanName(id)))) {
destroyIdentitySourceBean(id, applicationContext); destroyIdentitySourceBean(id, applicationContext);
} }
} catch (NoSuchBeanDefinitionException ignored) {
} finally { } finally {
BeanDefinitionHolder definitionHolder = getBeanDefinitionHolder(entity, BeanDefinitionHolder definitionHolder = getBeanDefinitionHolder(entity,
applicationContext); applicationContext);
@ -197,8 +196,9 @@ public class IdentitySourceBeanRegistry implements IdentitySourceEventListener {
definitionBuilder.addConstructorArgValue(identitySourceSyncUserPostProcessor); definitionBuilder.addConstructorArgValue(identitySourceSyncUserPostProcessor);
definitionBuilder.addConstructorArgValue(identitySourceSyncDeptPostProcessor); definitionBuilder.addConstructorArgValue(identitySourceSyncDeptPostProcessor);
definitionBuilder.addConstructorArgValue(identitySourceEventPostProcessor); definitionBuilder.addConstructorArgValue(identitySourceEventPostProcessor);
//设置为 RefreshScope // 设置作用域为prototype
definitionBuilder.setScope("refresh"); definitionBuilder.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
return new BeanDefinitionHolder(definitionBuilder.getBeanDefinition(), return new BeanDefinitionHolder(definitionBuilder.getBeanDefinition(),
IdentitySourceBeanUtils.getSourceBeanName(entity.getId().toString())); IdentitySourceBeanUtils.getSourceBeanName(entity.getId().toString()));
} }
@ -211,7 +211,8 @@ public class IdentitySourceBeanRegistry implements IdentitySourceEventListener {
*/ */
private static void destroyIdentitySourceBean(String id, private static void destroyIdentitySourceBean(String id,
ApplicationContext applicationContext) { ApplicationContext applicationContext) {
BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) ((ConfigurableApplicationContext) applicationContext) ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) configurableApplicationContext
.getBeanFactory(); .getBeanFactory();
String beanName = IdentitySourceBeanUtils.getSourceBeanName(id); String beanName = IdentitySourceBeanUtils.getSourceBeanName(id);
try { try {
@ -279,6 +280,8 @@ public class IdentitySourceBeanRegistry implements IdentitySourceEventListener {
registerIdentitySourceBean(entity, applicationContext); registerIdentitySourceBean(entity, applicationContext);
log.info("注册身份源: {} 同步任务", id); log.info("注册身份源: {} 同步任务", id);
registerIdentitySourceSyncTask(entity, applicationContext); registerIdentitySourceSyncTask(entity, applicationContext);
// 刷新
ApplicationContextHelp.refresh(IdentitySourceBeanUtils.getSourceBeanName(id));
} }
} }