Activiti7 + dynamic-datasource 多数据源配置
问题
原参考文章如下:SpringBoot 给 Activiti7 配置单独数据源。
根据文章配置,出现了原来配置的其他数据源失效,原先的事物注解 @Transactional
失效等问题。
原因
具体原因不清楚,目前只知道 @Bean
配置 PlatformTransactionManager
和 DataSource
会导致 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; } }
|