Я устанавливаю загрузочное приложение Spring с Camunda.Я хочу использовать мультитенантную настройку, как это определено в "https://docs.camunda.org/manual/7.5/user-guide/process-engine/multi-tenancy/#one-process-engine-per-tenant"
. Мне удалось настроить несколько механизмов процессов через Java (поэтому не с process.xml, а с кодированием), но, кажется, всегда естьобработчик по умолчанию. Как выполнить настройку только с определенными мной обработчиками?
Дополнительная информация:
- каждый обработчик использует свой собственный источник данных, полученный из контекста
- Я хочу избежать обработчика процессов по умолчанию, потому что ему нужен собственный источник данных. Я не хочу настраивать источник данных / базу данных для обработчика процессов без арендатора. (Если я не настрою источник данных по умолчанию, возникнут ошибкиисполнителем задания не удается установить соединение)
Попробованная мною установка находится в следующем блоке, но по какой-то причине всегда есть обработчик по умолчанию.
@Autowired
private ConfigurableListableBeanFactory beanFactory;
@Bean
@Order(4)
public void multipleCamunda(){
log.info("Starting Camunda Multitenant");
this.targetDatasources.entrySet().stream().forEach(entry -> {
String tenant = (String) entry.getKey();
DataSource tenantDatasource = (DataSource) entry.getValue();
SpringProcessEngineConfiguration standaloneProcessEngineConfiguration = new SpringProcessEngineConfiguration();
standaloneProcessEngineConfiguration.setDataSource(tenantDatasource);
standaloneProcessEngineConfiguration.setDatabaseSchemaUpdate("true");
standaloneProcessEngineConfiguration.setProcessEngineName(tenant);
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(fondsDatasource);
standaloneProcessEngineConfiguration.setTransactionManager(dataSourceTransactionManager);
standaloneProcessEngineConfiguration.setHistory(HistoryLevel.HISTORY_LEVEL_FULL.getName());
standaloneProcessEngineConfiguration.setJobExecutorDeploymentAware(true);
// deploy all processes from folder 'processes'
Resource[] resources = new Resource[0];
try {
resources = resourceLoader.getResources("classpath:/bpm/*.bpmn");
} catch (IOException e) {
e.printStackTrace();
}
standaloneProcessEngineConfiguration.setDeploymentResources(resources);
ProcessEngine processEngine = standaloneProcessEngineConfiguration.buildProcessEngine();
RuntimeContainerDelegate.INSTANCE.get().registerProcessEngine(processEngine);
beanFactory.registerSingleton("processEngine" + tenant,processEngine);
log.info("Started process Engine for " + tenant);
});
}
maven зависимости, которые я использую:
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-cdi</artifactId>
<version>7.10.0</version>
</dependency>
<dependency>
<groupId>org.camunda.bpm.javaee</groupId>
<artifactId>camunda-ejb-client</artifactId>
<version>7.10.0</version>
</dependency>
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-
webapp</artifactId>
<version>3.2.1</version>
</dependency>
Я предполагаю, что мне нужно определить @Bean для некоторого вида ConfigurationBean, но я не могу понять, какой и как. PlЛегко скажите мне, какой компонент конфигурации мне нужен для автоматического подключения и как.
** Решение **
Чтобы остановить инициализацию по умолчанию, вам нужно отредактировать application.yaml и добавить
camunda:
bpm:
enabled: false
Установка того же свойства в CamdundaBpmProperties как-то не работает.
Когда вы это сделаете, запуск по умолчанию не произойдет, и механизм процесса запустится при добавлении механизма процесса черезприведенный выше фрагмент кода