如何在春季活动中禁用历史记录

时间:2019-01-28 20:39:23

标签: spring spring-boot activiti

我将Activiti与Spring Boot结合使用,从Activiti表获取数据时遇到了一些性能问题,这是由于我猜是历史表。

当我从activiti表中查询数据时,在第一种情况下,它需要0.239秒才能获得结果,但是在第二种情况下,它需要1.884秒来从数据库中获取数据。

enter image description here

这是主要原因,我想禁用历史记录。

技术栈:

Spring Activiti-5.22.0

Spring Boot版本-1.5.8。发布

MyBatis for ORM

请告诉我,是否有任何配置可禁用历史记录,并且如果我们禁用历史记录,将会有任何问题。

3 个答案:

答案 0 :(得分:1)

您可以通过在@Configuration类中设置ProcessEngineConfiguration的历史记录属性来禁用历史记录。

@Configuration
public class ActivityConfig {

    @Autowired
    DataSource dataSource;

    @Bean
    public DataSourceTransactionManager getTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public ProcessEngineConfigurationImpl getProcessEngineConfiguration() {
        SpringProcessEngineConfiguration res = new SpringProcessEngineConfiguration();
        res.setDataSource(dataSource);
        res.setHistory("full");
        res.setTransactionManager(getTransactionManager());
        return res;
    }

    @Bean
    public ProcessEngineFactoryBean getProcessEngine() {
        ProcessEngineFactoryBean res = new ProcessEngineFactoryBean();
        res.setProcessEngineConfiguration(getProcessEngineConfiguration());
        return res;
    }

    @Bean
    public RepositoryService getRepositoryService() throws Exception {
        return getProcessEngine().getObject().getRepositoryService();
    }

    @Bean
    public FormService getFormService() throws Exception {
        return getProcessEngine().getObject().getFormService();
    }

    @Bean
    public TaskService getTaskService() throws Exception {
        return getProcessEngine().getObject().getTaskService();
    }

    @Bean
    public RuntimeService getRuntimeService() throws Exception {
        return getProcessEngine().getObject().getRuntimeService();
    }

    @Bean
    public HistoryService getHistoryService() throws Exception {
        return getProcessEngine().getObject().getHistoryService();
    }

    @Bean
    public IdentityService getIdentityService() throws Exception {
        return getProcessEngine().getObject().getIdentityService();
    }
}

如果将历史记录设置为“无”,则不会有任何问题,也不会有关于过去活动的信息。

您可以设置的级别为:无,活动,审核,完整。 详细信息如下:https://www.activiti.org/5.x/userguide/#historyConfig

答案 1 :(得分:0)

在这里查看:https://github.com/Activiti/Activiti/blob/5.x/modules/activiti-spring-boot/spring-boot-starters/activiti-spring-boot-starter-basic/src/main/java/org/activiti/spring/boot/ActivitiProperties.java#L46

您可以尝试:

spring.activiti.historyLevel=none

在application.properties文件中。 希望这会有所帮助。

答案 2 :(得分:0)

我们可以通过将历史记录级别保持为“ NONE”来停止历史记录。但这里的重点是在哪里设置历史记录级别。使用@ e.g78的想法,我在配置级别更新了代码,但这并不能解决我的问题。所以我如下更新了代码。

@Autowired
private SpringProcessEngineConfiguration config;

@GetMapping("/startProcess")
public String startProcess() {
    config.setHistoryLevel(HistoryLevel.NONE);
    RuntimeService runtimeService = config.getRuntimeService();
    runtimeService.startProcessInstanceByKey("testing_DeletingHistory", "start");

例如,感谢78。您的回答对我有所帮助,只需进行少量修改即可。