為什么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服務
@Service@Transactionalpublic class ActivitiService {//注入為我們自動配置好的服務@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;//開始流程,傳入申請者的id以及公司的idpublic voidstartProcess( Long personId, Long compId){Map<String, Object> variables = new HashMap<String, Object>();variables.put("personId", personId);variables.put("compId", compId);runtimeService.startProcessInstanceByKey("joinProcess", variables);}//獲得某個人的任務別表public List<Task> getTasks(String assignee){return taskService.createTaskQuery().taskCandidateUser(assignee).list();}//完成任務publicvoidcompleteTasks(Boolean joinApproved, String taskId){Map<String, Object> taskVariables = new HashMap<String, Object>();taskVariables.put("joinApproved", joinApproved);taskService.complete(taskId, taskVariables);}}?
Service Task服務
@Servicepublic class JoinService {@AutowiredPersonRepository personRepository;@Autowiredprivate CompRepository compRepository;//加入公司操作,可從DelegateExecution獲取流程中的變量public void ?joinGroup(DelegateExecution execution){Boolean bool = (Boolean) execution.getVariable("joinApproved");if(bool){Long personId = (Long) execution.getVariable("personId");Long compId = (Long) execution.getVariable("compId");Comp comp = compRepository.findOne(compId);Person person = personRepository.findOne(personId);person.setComp(comp);personRepository.save(person);System.out.println("加入組織成功");}else{System.out.println("加入組織失敗");}}//獲取符合條件的審批人,演示這里寫死,使用應用使用實際代碼public List<String> findUsers(DelegateExecution execution){return Arrays.asList("admin","wtr");}} 控制器
@RestControllerpublicclass MyRestController {@Autowiredprivate ActivitiService myService;//開啟流程實例@RequestMapping(value="/process/{personId}/{compId}", method= RequestMethod.GET)publicvoidstartProcessInstance(@PathVariable Long personId,@PathVariable Long compId){myService.startProcess(personId,compId);}//獲取當前人的任務@RequestMapping(value="/tasks", method= RequestMethod.GET)public List<TaskRepresentation> getTasks(@RequestParamString assignee){List<Task> tasks = myService.getTasks(assignee);List<TaskRepresentation> dtos = new ArrayList<TaskRepresentation>();for(Task task : tasks){dtos.add(newTaskRepresentation(task.getId(), task.getName()));}return dtos;}//完成任務@RequestMapping(value="/complete/{joinApproved}/{taskId}", method= RequestMethod.GET)publicStringcomplete(@PathVariable Boolean joinApproved,@PathVariableString taskId){myService.completeTasks(joinApproved,taskId);return"ok";}//Task的dtostaticclass TaskRepresentation {privateString id;privateString name;publicTaskRepresentation(String id, String name){this.id = id;this.name = name;}publicStringgetId(){return id;}publicvoidsetId(String id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}}}?
入口類
@SpringBootApplicationpublicclass ActivitiApplication {@Autowiredprivate PersonRepository personRepository;@Autowiredprivate CompRepository compRepository;publicstaticvoidmain(String[] args){SpringApplication.run(ActivitiApplication.class, args);}//初始化模擬數據@Beanpublic CommandLineRunner init(final ActivitiService myService){returnnewCommandLineRunner(){publicvoidrun(String... strings)throws Exception {if(personRepository.findAll().size() == 0){personRepository.save(newPerson("wtr"));personRepository.save(newPerson("wyf"));personRepository.save(newPerson("admin"));}if(compRepository.findAll().size() == 0){Comp group = newComp("great company");compRepository.save(group);Person admin = personRepository.findByPersonName("admin");Person wtr = personRepository.findByPersonName("wtr");admin.setComp(group);wtr.setComp(group);personRepository.save(admin);personRepository.save(wtr);}}};}}例子用的是jpa作為數據DAO層,實際開發中用hibernate或者jdbc或者mybatis于此集成大同小異,自己可以根據實際情況進行調整?
轉載于:https://my.oschina.net/VILLE/blog/792756
總結
以上是生活随笔為你收集整理的Spring Boot与Activiti集成实战的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。