Jboot初遇activiti

1.概述前言

在网上好多都是spring整合activiti的例子或解决方案,最近有点时间所以来学习学习,这里以公司使用的主要框架Jboot为主。网上有个JFina集成的例子,项目很好l Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)。我的配置项就是根据他做的

2.插件配置

2.1ActivitiPlugin

import com.jfinal.plugin.IPlugin;
import com.jfinal.plugin.activerecord.DbKit;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;

/**
 *
 */
public class ActivitiPlugin implements IPlugin{

    private static ProcessEngine processEngine = null;
    private static ProcessEngineConfiguration processEngineConfiguration = null;
    private boolean isStarted = false;
    @Override
    public boolean start(){
        try {
            createProcessEngine();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return true;
    }

    @Override
    public boolean stop() {
        ProcessEngines.destroy();
        isStarted = false;
        return true;
    }

    private Boolean createProcessEngine() throws Exception{
        if (isStarted) {
            return true;
        }
        StandaloneProcessEngineConfiguration conf = (StandaloneProcessEngineConfiguration) ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        conf.setDataSource(DbKit.getConfig().getDataSource());
        conf.setEnableDatabaseEventLogging(false);
        conf.setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_TRUE);//更新
//		conf.setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE);//重置数据库!!!调试用!!!请勿打开!!!
        conf.setDbHistoryUsed(true);
        conf.setTransactionsExternallyManaged(true);//使用托管事务工厂
        conf.setTransactionFactory(new ActivitiTransactionFactory());
        UuidGenerator uuidG = new UuidGenerator();
        conf.setIdGenerator(uuidG);
        conf.setActivityFontName("宋体");
        conf.setLabelFontName("宋体");
        conf.setAnnotationFontName("宋体");

        ActivitiPlugin.processEngine = conf.buildProcessEngine();
        isStarted = true;
        //开启流程引擎
        System.out.println("启动流程引擎.......");
        return isStarted;
    }

    // 开启流程服务引擎
    public static ProcessEngine buildProcessEngine() {
        if (processEngine == null)
            if (processEngineConfiguration != null) {
                processEngine = processEngineConfiguration.buildProcessEngine();
            }
        return processEngine;
    }
}

2.2 ActivitiTransaction

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.ibatis.session.TransactionIsolationLevel;
import org.apache.ibatis.transaction.Transaction;

import com.jfinal.plugin.activerecord.DbKit;

/**
 *
 */
public class ActivitiTransaction implements Transaction {

	protected Connection connection;
	protected DataSource dataSource;
	protected TransactionIsolationLevel level;
	protected boolean autoCommmit;

	public ActivitiTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {
		dataSource = ds;
		level = desiredLevel;
		autoCommmit = desiredAutoCommit;
	}

	public ActivitiTransaction(Connection connection) {
		this.connection = connection;
	}

	@Override
	public Connection getConnection() throws SQLException {
		if (connection == null) {
			openConnection();
		}
		return connection;
	}

	@Override
	public void commit() throws SQLException {
	}

	@Override
	public void rollback() throws SQLException {
	}

	@Override
	public void close() throws SQLException {
		if(connection!=null){
			DbKit.getConfig().close(connection);
		}
	}

	protected void openConnection() throws SQLException {
		connection = DbKit.getConfig().getConnection();
		if (level != null) {
			connection.setTransactionIsolation(level.getLevel());
		}
	}
}

2.3 ActivitiTransactionFactory

import java.sql.Connection;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.session.TransactionIsolationLevel;
import org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.TransactionFactory;

/**
 *
 */
public class ActivitiTransactionFactory implements TransactionFactory {

	@Override
	public void setProperties(Properties props) {
	}

	@Override
	public Transaction newTransaction(Connection conn) {
		return new ActivitiTransaction(conn);
	}

	@Override
	public Transaction newTransaction(DataSource ds, TransactionIsolationLevel level, boolean autoCommit) {
		return new ActivitiTransaction(ds, level, autoCommit);
	}
}

2.3 ActivitiConfig

凡是开发过 JFinal 的同学,都知道 JFinalConfig 是 JFinal 的核心配置,详情: https://www.jfinal.com/doc/2-1 

因为 Jboot 已经对 JFinal 进行了默认的配置,所以编写一个类继承 JbootAppListenerBase,然后复写对应的方法

import com.example.activiti.plugin.ActivitiPlugin;
import io.jboot.aop.jfinal.JfinalPlugins;
import io.jboot.core.listener.JbootAppListenerBase;

public class ActivitiConfig extends JbootAppListenerBase{

    public void ActivitiConfig(){

    }

    public void onPluginConfig(JfinalPlugins plugins) {
        plugins.add(new ActivitiPlugin());
    }

}

3 启动项目验证流程是否启动

并且数据库已经生成activiti的表:

配置成功!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值