1. 程式人生 > >Springboot2.0 專案中TKmybatis和Activiti整合的問題

Springboot2.0 專案中TKmybatis和Activiti整合的問題

版本資訊: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了。