Java 使用自定义后期部署器将Drools与Activiti和SpringBoot集成的问题

Java 使用自定义后期部署器将Drools与Activiti和SpringBoot集成的问题,java,spring-boot,drools,activiti,Java,Spring Boot,Drools,Activiti,我从这个论坛得到了帮助:我能够自动连接ProcessEngine,获得ProcessEngine配置,然后在添加deployer时,我被击中了。代码片段是: SpringProcessEngineConfiguration sp = (SpringProcessEngineConfiguration) processEngine.getProcessEngineConfiguration(); List<Deployer> listDeployer = new ArrayL

我从这个论坛得到了帮助:我能够自动连接ProcessEngine,获得ProcessEngine配置,然后在添加deployer时,我被击中了。代码片段是:

 SpringProcessEngineConfiguration sp = (SpringProcessEngineConfiguration) 
 processEngine.getProcessEngineConfiguration();

 List<Deployer> listDeployer = new ArrayList<Deployer>();
 listDeployer.add(new RulesDeployer());

 sp.setCustomPostDeployers(listDeployer); // <--setCustomPostDeployers function is not called
SpringProcessEngineConfiguration sp=(SpringProcessEngineConfiguration)
processEngine.getProcessEngineConfiguration();
List listDeployer=new ArrayList();
add(新规则部署程序());

sp.setCustomPostDeployers(listDeployer);// 我花了很多时间才弄明白,但在阅读了一些有趣的帖子和文档之后,我终于用Activiti、Spring Boot和Drools创建了一个示例

在您的情况下,在使用
processEngine
之前,您正在修改现有的SpringBoot配置,但是根据我的测试,由于已经读取了资源,因此在那里添加自定义部署器为时已晚。然后您必须更早地设置配置

文档一般都指出要更改“activiti.cfg.xml”,但这是针对
spring
的,对
spring引导
没有用处。然后,我们的想法是生成一个配置类,就像SpringBoot使用的那样

@Configuration
public class ProcessEngineConfigDrlEnabled {

@Autowired
private DataSource dataSource;

@Autowired
private PlatformTransactionManager transactionManager;

@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
    SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();

    try {
        config.setDeploymentResources(getBpmnFiles());
    } catch (IOException e) {
        e.printStackTrace();
    }

    config.setDataSource(dataSource);
    config.setTransactionManager(transactionManager);

    //Here the rulesdeployer is added. 
    config.setCustomPostDeployers(Arrays.asList(new RulesDeployer()));
    return config;
}

/*Read folder with BPMN files and folder with DLR files */
private Resource[] getBpmnFiles() throws IOException {
    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    Resource[] bpmnResources = resourcePatternResolver.getResources("classpath*:" + BPMN_PATH + "**/*.bpmn20.xml");
    Resource[] drlResources = resourcePatternResolver.getResources("classpath*:" + DRL_PATH + "**/*.drl");
    return (Resource[]) ArrayUtils.addAll(bpmnResources, drlResources);
}

@Bean
public ProcessEngineFactoryBean processEngine() {
    ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
    factoryBean.setProcessEngineConfiguration(processEngineConfiguration());
    return factoryBean;
}

...
}
通常,此类必须位于Spring boot可以读取的数据包中(在主类的数据包层次结构中)

在本例中,我使用了默认配置中的原始数据源和transactionManager。如果没有,则必须实现您的配置并将其添加到配置中