Springboot2.0 專案中TKmybatis和Activiti整合的問題
阿新 • • 發佈:2019-02-05
版本資訊:springboot 2.0,mybatis 3.4.6 , tkmybatis 2.0 ,activiti 6.0
今天在整合專案的時候,發現mybatis和activiti整合時不會報錯,但是mapper和activiti整合到一起時啟動就會報錯,錯誤資訊如下:
Parameter 1 of method springProcessEngineConfiguration in org.activiti.spring.boot.JpaProcessEngineAutoConfiguration$JpaConfiguration required a bean of type 'javax.persistence.EntityManagerFactory' that could not be found.
於是查看了一下JpaProcessEngineAutoConfiguration類,部分程式碼如下:
public class JpaProcessEngineAutoConfiguration { public JpaProcessEngineAutoConfiguration() { } @Configuration @ConditionalOnClass( name = {"javax.persistence.EntityManagerFactory"} ) @EnableConfigurationProperties({ActivitiProperties.class}) public static class JpaConfiguration extends AbstractProcessEngineAutoConfiguration { public JpaConfiguration() { } } }
可以看到EntityManagerFactory是被@ConditionlOnClass所註解的。而EntityManagerFactory是來自於JPA相關的介面。其實這裡是Activiti所做的判斷,如果專案使用了JPA,那走JPA,如果沒有,則走Mybatis。所以只引入Mybatis和Activiti的話專案不會報錯,那為什麼引入了Mapper就會報錯呢?
繼續看mapper的原始碼就能知道原因,其實mapper並沒有實現EntityManagerFactory介面,而是自己寫了一套,而在Activiti中則認為當前專案使用的是JPA,找不到EntityManagerFactory的實現類。所以報錯。解決方法就是在mapper中移除對persistence-api依賴,在activiti中加上jpa的依賴。這樣的話,專案啟動不會報錯,並且能正常使用tkmybatis,省去了公共的增刪改查程式碼。
修改後的pom.xml如下:
<!-- 整合tk-mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${tk.mapper.version}</version>
<exclusions>
<exclusion>
<artifactId>persistence-api</artifactId>
<groupId>javax.persistence</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-jpa</artifactId>
<version>${activiti.version}</version>
</dependency>
其他的配置按照mapper和activiti官網上的來就OK了。