Activiti7 + dynamic-datasource 多数据源配置
Kiml Lv5
  • 前言
    之前数据库不涉及多数据源的问题,本次引入 Activiti7 后需要配置单独的数据源。网上的方法都是自己写 bean 注入,然后在 SpringProcessEngineConfiguration 内进行 set 操作,但是出现了很大的问题。。。

  • 更新

1
25-03-03 初始记录

问题

原参考文章如下:SpringBoot 给 Activiti7 配置单独数据源

根据文章配置,出现了原来配置的其他数据源失效,原先的事物注解 @Transactional 失效等问题。

原因

具体原因不清楚,目前只知道 @Bean 配置 PlatformTransactionManagerDataSource 会导致 dynamic-datasource 配置的默认数据源失效。

解决

DynamicDataSourceProvider 获取数据源并构建事物管理,具体配置信息如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@Configuration  
public class ActivitiDataSourceConfig extends AbstractProcessEngineAutoConfiguration {

@Resource
private DynamicDataSourceProvider dynamicDataSourceProvider;

@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(ActivitiProperties activitiProperties) {
SpringProcessEngineConfiguration conf = new SpringProcessEngineConfiguration();
DataSource dataSource = dynamicDataSourceProvider.loadDataSources().get(DBConstants.DATASOURCE_WORKFLOW);
conf.setDataSource(dataSource);
conf.setTransactionManager(new DataSourceTransactionManager(dataSource));
conf.setDeploymentName(activitiProperties.getDeploymentName());
conf.setDatabaseSchema(activitiProperties.getDatabaseSchema());
conf.setDatabaseSchemaUpdate(activitiProperties.getDatabaseSchemaUpdate());
conf.setDbHistoryUsed(activitiProperties.isDbHistoryUsed());
conf.setAsyncExecutorActivate(activitiProperties.isAsyncExecutorActivate());
if (!activitiProperties.isAsyncExecutorActivate()) {
ValidatorSet springBootStarterValidatorSet = new ValidatorSet("activiti-spring-boot-starter");
springBootStarterValidatorSet.addValidator(new AsyncPropertyValidator());
if (conf.getProcessValidator() == null) {
ProcessValidatorImpl processValidator = new ProcessValidatorImpl();
processValidator.addValidatorSet(springBootStarterValidatorSet);
conf.setProcessValidator(processValidator);
} else {
conf.getProcessValidator().getValidatorSets().add(springBootStarterValidatorSet);
}
}
conf.setMailServerHost(activitiProperties.getMailServerHost());
conf.setMailServerPort(activitiProperties.getMailServerPort());
conf.setMailServerUsername(activitiProperties.getMailServerUserName());
conf.setMailServerPassword(activitiProperties.getMailServerPassword());
conf.setMailServerDefaultFrom(activitiProperties.getMailServerDefaultFrom());
conf.setMailServerUseSSL(activitiProperties.isMailServerUseSsl());
conf.setMailServerUseTLS(activitiProperties.isMailServerUseTls());

conf.setHistoryLevel(activitiProperties.getHistoryLevel());
conf.setCopyVariablesToLocalForTasks(activitiProperties.isCopyVariablesToLocalForTasks());
conf.setSerializePOJOsInVariablesToJson(activitiProperties.isSerializePOJOsInVariablesToJson());
conf.setJavaClassFieldForJackson(activitiProperties.getJavaClassFieldForJackson());

if (activitiProperties.getCustomMybatisMappers() != null) {
conf.setCustomMybatisMappers(getCustomMybatisMapperClasses(activitiProperties.getCustomMybatisMappers()));
}

if (activitiProperties.getCustomMybatisXMLMappers() != null) {
conf.setCustomMybatisXMLMappers(new HashSet<>(activitiProperties.getCustomMybatisXMLMappers()));
}

if (activitiProperties.getCustomMybatisXMLMappers() != null) {
conf.setCustomMybatisXMLMappers(new HashSet<>(activitiProperties.getCustomMybatisXMLMappers()));
}

if (activitiProperties.isUseStrongUuids()) {
conf.setIdGenerator(new StrongUuidGenerator());
}

if (activitiProperties.getDeploymentMode() != null) {
conf.setDeploymentMode(activitiProperties.getDeploymentMode());
}
return conf;
}
}
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量