为什么80%的码农都做不了架构师?>>>   

Spring Boot基于Spring和“习惯由于配置”原则,实现快速搭建项目的准生产框架。建议现在的Java从业者快速迁移到以Spring Boot为基础开发,这将大大降低开发的难度和极大的提高开发效率。

项目搭建

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.wisely</groupId>

<artifactId>activiti</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>activiti</name>

<description>Demo project for Spring Boot</description>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.0.RELEASE</version>

<relativePath/><!-- lookup parent from repository -->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

<activiti.version>5.21.0</activiti.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>

<groupId>org.activiti</groupId>

<artifactId>activiti-spring-boot-starter-basic</artifactId>

<version>${activiti.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

application.properties配置

spring.jpa.hibernate.ddl-auto=update

spring.jpa.database=MYSQL

spring.datasource.url=jdbc:mysql://192.168.1.68:3306/activiti-spring-boot?characterEncoding=UTF-8

spring.datasource.username=root

spring.datasource.password=密码

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

实体类

@Entity

publicclass Person {

@Id

@GeneratedValue

private Long personId;

private String personName;

@ManyToOne(targetEntity = Comp.class)

private Comp comp;

publicPerson(){

}

publicPerson(String personName){

super();

this.personName = personName;

}

//省略getter、setter方法

}

@Entity

publicclass Comp {

@Id

@GeneratedValue

private Long compId;

private

String compName;

@OneToMany(mappedBy = "comp",targetEntity = Person.class)

private List<Person> people;

public Comp(String compName)

{this.compName = compName;}

publicComp(){

}

//省略getter、setter方法

}

DAO

public interface PersonRepository extends JpaRepository<Person, Long> {

public Person findByPersonName(String personName);

}

public interface CompRepository extends JpaRepository<Comp, Long>{

}

Activiti服务

  1. @Service
  2. @Transactional
  3. public class ActivitiService {
  4. //注入为我们自动配置好的服务
  5. @Autowired
  6. private RuntimeService runtimeService;
  7. @Autowired
  8. private TaskService taskService;
  9. //开始流程,传入申请者的id以及公司的id
  10. public voidstartProcess( Long personId, Long compId){
  11. Map<String, Object> variables = new HashMap<String, Object>();
  12. variables.put("personId", personId);
  13. variables.put("compId", compId);
  14. runtimeService.startProcessInstanceByKey("joinProcess", variables);
  15. }
  16. //获得某个人的任务别表
  17. public List<Task> getTasks(String assignee){
  18. return taskService.createTaskQuery().taskCandidateUser(assignee).list();
  19. }
  20. //完成任务
  21. publicvoidcompleteTasks(Boolean joinApproved, String taskId){
  22. Map<String, Object> taskVariables = new HashMap<String, Object>();
  23. taskVariables.put("joinApproved", joinApproved);
  24. taskService.complete(taskId, taskVariables);
  25. }
  26. }

Service Task服务

  1. @Service
  2. public class JoinService {
  3. @Autowired
  4. PersonRepository personRepository;
  5. @Autowired
  6. private CompRepository compRepository;
  7. //加入公司操作,可从DelegateExecution获取流程中的变量
  8. public void  joinGroup(DelegateExecution execution){
  9. Boolean bool = (Boolean) execution.getVariable("joinApproved");
  10. if(bool){
  11. Long personId = (Long) execution.getVariable("personId");
  12. Long compId = (Long) execution.getVariable("compId");
  13. Comp comp = compRepository.findOne(compId);
  14. Person person = personRepository.findOne(personId);
  15. person.setComp(comp);
  16. personRepository.save(person);
  17. System.out.println("加入组织成功");
  18. }else{
  19. System.out.println("加入组织失败");
  20. }
  21. }
  22. //获取符合条件的审批人,演示这里写死,使用应用使用实际代码
  23. public List<String> findUsers(DelegateExecution execution){
  24. return Arrays.asList("admin","wtr");
  25. }
  26. }

控制器

  1. @RestController
  2. publicclass MyRestController {
  3. @Autowired
  4. private ActivitiService myService;
  5. //开启流程实例
  6. @RequestMapping(value="/process/{personId}/{compId}", method= RequestMethod.GET)
  7. publicvoidstartProcessInstance(@PathVariable Long personId,@PathVariable Long compId){
  8. myService.startProcess(personId,compId);
  9. }
  10. //获取当前人的任务
  11. @RequestMapping(value="/tasks", method= RequestMethod.GET)
  12. public List<TaskRepresentation> getTasks(@RequestParamString assignee){
  13. List<Task> tasks = myService.getTasks(assignee);
  14. List<TaskRepresentation> dtos = new ArrayList<TaskRepresentation>();
  15. for(Task task : tasks){
  16. dtos.add(newTaskRepresentation(task.getId(), task.getName()));
  17. }
  18. return dtos;
  19. }
  20. //完成任务
  21. @RequestMapping(value="/complete/{joinApproved}/{taskId}", method= RequestMethod.GET)
  22. publicStringcomplete(@PathVariable Boolean joinApproved,@PathVariableString taskId){
  23. myService.completeTasks(joinApproved,taskId);
  24. return"ok";
  25. }
  26. //Task的dto
  27. staticclass TaskRepresentation {
  28. privateString id;
  29. privateString name;
  30. publicTaskRepresentation(String id, String name){
  31. this.id = id;
  32. this.name = name;
  33. }
  34. publicStringgetId(){
  35. return id;
  36. }
  37. publicvoidsetId(String id){
  38. this.id = id;
  39. }
  40. publicStringgetName(){
  41. return name;
  42. }
  43. publicvoidsetName(String name){
  44. this.name = name;
  45. }
  46. }
  47. }

入口类

  1. @SpringBootApplication
  2. publicclass ActivitiApplication {
  3. @Autowired
  4. private PersonRepository personRepository;
  5. @Autowired
  6. private CompRepository compRepository;
  7. publicstaticvoidmain(String[] args){
  8. SpringApplication.run(ActivitiApplication.class, args);
  9. }
  10. //初始化模拟数据
  11. @Bean
  12. public CommandLineRunner init(final ActivitiService myService){
  13. returnnewCommandLineRunner(){
  14. publicvoidrun(String... strings)throws Exception {
  15. if(personRepository.findAll().size() == 0){
  16. personRepository.save(newPerson("wtr"));
  17. personRepository.save(newPerson("wyf"));
  18. personRepository.save(newPerson("admin"));
  19. }
  20. if(compRepository.findAll().size() == 0){
  21. Comp group = newComp("great company");
  22. compRepository.save(group);
  23. Person admin = personRepository.findByPersonName("admin");
  24. Person wtr = personRepository.findByPersonName("wtr");
  25. admin.setComp(group);wtr.setComp(group);
  26. personRepository.save(admin);personRepository.save(wtr);
  27. }
  28. }
  29. };
  30. }
  31. }

例子用的是jpa作为数据DAO层,实际开发中用hibernate或者jdbc或者mybatis于此集成大同小异,自己可以根据实际情况进行调整

转载于:https://my.oschina.net/VILLE/blog/792756

Spring Boot与Activiti集成实战相关推荐

  1. Spring Boot 单元测试详解+实战教程

    转载自   Spring Boot 单元测试详解+实战教程 Spring Boot 的测试类库 Spring Boot 提供了许多实用工具和注解来帮助测试应用程序,主要包括以下两个模块. spring ...

  2. Spring Boot最新版集成邮件发送功能大全

    Spring Boot最新版集成邮件发送功能大全 前言 一.开启SMTP服务并获取授权码 二.创建Spring Boot项目 1.配置邮箱基本信息: 2.简单邮件发送: 3.发送带附件的邮件: 5.使 ...

  3. Spring Boot Vue Element入门实战(完结)

    最近给朋友做一个大学运动会管理系统,用作教学案例,正好自己也在自学VUE,决定用spring boot vue做一个简单的系统.vue这个前端框架很火,他和传统的Jquery 编程思路完全不一样,Jq ...

  4. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  5. spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问

    spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...

  6. 10、Spring Boot 2.x 集成 Log4j2

    1.10 Spring Boot 2.x 集成 Log4j2 完整源码: Spring-Boot-Demos 转载于:https://www.cnblogs.com/Grand-Jon/p/99980 ...

  7. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  8. 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80785403 为了提高性能,减少数据库的压力,使用 ...

  9. spring boot 2.0 集成shiro注意事项

    2019独角兽企业重金招聘Python工程师标准>>> spring boot 2.0 全面拥抱java8,在安全验证上面 很大程度的简化了配置项,用shiro就要把security ...

最新文章

  1. 李艳芳北京应用物理与计算机,太赫兹量子级联激光器有源区增益分析和设计-太赫兹科学与电子信息.PDF...
  2. xp与Linux双系统共存
  3. mac下简单绘图工具
  4. 寒窗苦读十多年,我的毕业论文只研究了一个「屁」
  5. linux-tar命令详解
  6. 阿里沈询:分布式事务原理与实践
  7. centos6.5 python2.6.6升级到python2.7.15
  8. 向量的 加,减,乘 运算_2
  9. 第十二:Pytest进阶之配置文件
  10. tableview cell自适应撑高
  11. IT兄弟连 Java语法教程 编写Java源代码
  12. 语音识别属于计算机的什么应用领域,语音识别系统
  13. 7 Papers Radios | 陈丹琦关系抽取新SOTA;上海交大医疗版MNIST数据集
  14. 【矩阵运算】矩阵的迹以及迹对矩阵求导总结
  15. godaddy无法修改域名服务器,GoDaddy域名修改DNS设置方法
  16. Spell of the rising moon
  17. 课题申报书范文_课题申请书范例
  18. 计算机的应届毕业生简历上可以写什么,计算机应届生简历范文计算机专业应届毕业生简历写.doc...
  19. ADS2015导入飞思卡尔元器件模型 安装DesignKit
  20. 主题: 编译工具配置出现的问题总结

热门文章

  1. POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
  2. MFC和OpenCV结合
  3. vagrant 常用命令
  4. 《软件工艺师:专业、务实、自豪》一2.8 小结
  5. java多线程编程一之java线程的原理
  6. 100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击
  7. 七招制胜ASP.NET应用程序开发
  8. Attempt to save the map xxx.m failed
  9. django的admin界面删除因为外键约束导致失败
  10. ERRORS: ?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEW