近期在研究工作流引擎,上一篇关于工作流引擎的是flowable-engine。环境弄好之后发现流程编辑实在是太复杂,于是找一个国内的Uflo再试试。感觉界面操作上没有那么复杂,比较清晰。只不过是使用的人不太多,遇到的一些问题在找不到。经过不断摸索和尝试终于搭建完成,闲言少叙,书归正文。按照官方的文档进行配置http://wiki.bsdn.org/pages/viewpage.action?pageId=30441805。但官方提供的是sping MVC的配置方法,我的系统使用的是springboot1.5.7。又不想用视频中的context.xml文件进行配置,于是开始研究在springboot1.5.7下集成Uflo2.1.4。
1、pom.xml
按照官方文档介绍只需要引入一个依赖就可以:uflo-console
<dependency>
<groupId>com.bstek.uflo</groupId>
<artifactId>uflo-console</artifactId>
<version>2.1.4</version>
</dependency>
2、配置启动类Application.java
导入uflo的配置文件
@ImportResource(locations = {"classpath:uflo-console-context.xml"})
扫描uflo中的所有entity
Application中添加@EntityScan,扫描所有的entity。
@EntityScan({
"com.bstek.uflo.model"
})
3、配置application.yml
添加current_session_context_class配置,主要是为了找到Hibernate的sessionFactory。在application.yml文件中找到spring.jpa.properties.hibernate节点下面添加。找好三个属性的路径,千万别配错了
current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext
dialect: org.hibernate.dialect.MySQL5Dialect
ddl-auto: update
4、最关键的sessionFactory和transaction的配置
4.1、添加UfloConfig.java类(名称自定义,没有要求)
与Application.java文件同级包下添加Uflo.java类,实现注册sessionfactory和transaction的配置,要实现TransactionManagementConfigurer类,返回JpaTransactionManager,这个是引入了spring-boot-starter-data-jpa默认的事务处理类。
代码如下:
import org.hibernate.SessionFactory;
import org.hibernate.jpa.HibernateEntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import javax.persistence.EntityManagerFactory;
@Configuration
@EnableTransactionManagement
public class UfloConfig implements TransactionManagementConfigurer {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
return hemf.getSessionFactory();
}
}
4.2、实现Uflo的EnvironmentProvider类
这是Uflo要求必须实现的一个类,主要目的应该是为了获取SessionFactory、Transaction、user和category。
直接上代码:
import com.bstek.uflo.env.EnvironmentProvider;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.persistence.EntityManagerFactory;
@Configuration
public class EnvironmentProviderImpl implements EnvironmentProvider {
@Autowired
private SessionFactory sessionFactory;
@Autowired
private EntityManagerFactory entityManagerFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public PlatformTransactionManager getPlatformTransactionManager() {
return new JpaTransactionManager(entityManagerFactory);
}
public String getCategoryId() {
return null;
}
public String getLoginUser() {
return "anonymous";
}
}
5、配置UfloServlet
springboot配置servlet百度一大把,详见代码:
import com.bstek.uflo.console.UfloServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean servletRegistration() {
return new ServletRegistrationBean(new UfloServlet(), "/uflo/*");
}
}
以上配置完成,启动Application。并在浏览器输入http://localhost:8080/uflo/designer