我的配置
@Slf4j
public class ChangeDbEngineConfiguration implements EngineConfigurator {
private static AtomicBoolean initialized = new AtomicBoolean();
@Override
public void beforeInit(AbstractEngineConfiguration engineConfiguration) {
if (initialized.compareAndSet(false, true)) {
log.info("启动中动态切换数据源workflow");
DynamicDataSourceContextHolder.push("workflow");
}
}
@Override
public void configure(AbstractEngineConfiguration engineConfiguration) {
}
@Override
public int getPriority() {
return 0;
}
}
使用SPI机制指定EngineConfigurator实现类
org.flowable.common.engine.impl.EngineConfigurator
启动后清除本地线程 以确保不会发生数据源泄漏或混乱的情况。
@Component
@Slf4j
public class CleanDnamicDatasourceContextHolderRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("强制清空本地线程");
DynamicDataSourceContextHolder.clear();
}
}
启动成功
想了解原理可以参考:https://ask.csdn.net/questions/7684932