最近整合springboot+mybatis3.1.1+activity5.12

编程

兼容老项目的痛谁懂,唯有亲身整合过的人才懂了。

拿到老项目代码,发现项目用的activity 是5.12 版本,赶紧找一上网上的资源对于这么早期的activity 版本的资料,一查,发现,喔阖,

结合5.22版本做理解吧,自己吃自己了。

一、首先重构项目基于maven 管理,包怎么导进来啊,啊啊? activity 5.12 的版本没有整合到maven,那么意味着,我们需要自己搭建一个maven 私服

把老项目的jar包发布到私服自己下载下来

1)windows 采用nexus 搭建maven 私服  版本 nexus-2.14.5-02-bundle.zip

不要问我为什么用这么老的,翻不了墙,下不到新了,在网上找到网盘的资源下载的,有条件的自己下载最新的玩,需要这个的加,可以私信找我要,

解压出来,有两个文件夹nexus-2.14.5-02,sonatype-work,找到E:

exus-2.14.5-02-bundle

exus-2.14.5-02injswwindows-x86-64,

以管理员的方式运行console-nexus.bat,

启动完成后,在浏览器打开 http://localhost:8081/nexus/#welcome,在E:

exus-2.14.5-02-bundle

exus-2.14.5-02conf 下的

nexus.properties可以修改启动端口

看到页面,log in ,初始账户密码admin/admin123

登录成功,点击repositories,选中3rd party,

点击,artifact upload,

选择 GAV Parameters

往下拉,选择包上传,会自动填充上面的参数,add  artifact 一个一个upload,

最终效果

在上面可以看到jar 已上传成功

2)在项目中引用私服,以及下载jar 包到spring boot 项目中

点击sunmary,把repository,添加到pom.xml 中

在项目中加上刚才上传的jar 包,

到这里为止,activiti 5.12的jar包已成功下载到我们的spring boot 项目中了 

二、包下载下来了,搭建的项目用的mybatis-spring-boot-start 1.3.2,用到的mybatis 的版本是 3.4.6吧好像,支持@Mapper 注解,

然后发现,哎呀卧槽,版本不兼容,Error parsing Mapper XML. The XML location is "org/activiti/db/mapping/entity/Execution.xml".

面对疾风吧~!!!!!好了,问题还是要解决,至于是如何发现是版本不兼容的,中途找了大量的资料,切换了大量的版本做测试,

终于测试到activity 5.12 是兼容mybatis 3.1.1的,好了,@Mapper 是3.4.0以上的mybatis 才有的特性,那么就需要我们自己配置spring +mybatis 的xml了,

用spring boot ,回到xml的时代,难受。

1)在项目中加上spring-jdbc 和spring-tx 配置需要用到

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

</dependency>

2)加入mybatis 和mybatis-spring

<!-- 以下部分用于集成mybatis-->

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.1.1</version>

</dependency>

<!-- mybatis/spring包 -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.2</version>

</dependency>

3)加入数据库驱动

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc7</artifactId>

<version>12.1.0</version>

</dependency>

4)采用dbcp 连接

<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.2.2</version>

</dependency>

需要用的包就差不多了,spring boot 本身用的包肯定要引用的,还要引入

<dependency>

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

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

</dependency>

测试使用

5)开始配置,都放在resource 下吧,方便查看测试

jdbc.properties

#jdbc驱动类

driver=oracle.jdbc.driver.OracleDriver

#服务器url

url=jdbc:oracle:thin:@localhost:1521:orcl

username=XXX

password=XXX123

initialSize=3

maxActive=20

maxIdle=20

minIdle=1

maxWait=60000

spring-application.xml 配置

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

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

<!-- 自动扫描 -->

<context:component-scan base-package="com.xxx.xxx.activity" />

<!-- 引入配置文件 -->

<bean id="propertyConfigurer"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location"

value="classpath:jdbc.properties"/>

</bean>

<!-- ignore-unresolvable为true时,配置文件${}找不到对应占位符的值 不会报错,会直接赋值"${}" -->

<context:property-placeholder ignore-unresolvable="true" />

<bean id="dataSource"

class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

<!-- 初始化连接大小 -->

<property name="initialSize" value="${initialSize}"></property>

<!-- 连接池最大数量 -->

<property name="maxActive" value="${maxActive}"></property>

<!-- 连接池最大空闲 -->

<property name="maxIdle" value="${maxIdle}"></property>

<!-- 连接池最小空闲 -->

<property name="minIdle" value="${minIdle}"></property>

<!-- 获取连接最大等待时间 -->

<property name="maxWait" value="${maxWait}"></property>

</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->

<bean id="sqlSessionFactory"

class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<!-- 自动扫描mapping.xml文件 -->

<property name="mapperLocations" value="classpath:mapper/*.xml"></property>

<property name="typeAliasesPackage" value="com.xxx.xxx.common.model"></property>

<!-- 配置mybatis配置文件的位置 -->

<!--<property name="configLocation" value="classpath:mybatis-config.xml"/>-->

</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.xxx.xxx.activity.mapper" />

<property name="sqlSessionFactoryBeanName"

value="sqlSessionFactory"></property>

</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg ref="sqlSessionFactory"/>

</bean>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

p:dataSource-ref="dataSource"/>

<aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true" />

<tx:advice id="txAdvice" transaction-manager="transactionManager" >

<tx:attributes>

<tx:method name="start*" propagation="REQUIRED"/>

<tx:method name="submit*" propagation="REQUIRED"/>

<tx:method name="clear*" propagation="REQUIRED"/>

<tx:method name="create*" propagation="REQUIRED"/>

<tx:method name="activate*" propagation="REQUIRED"/>

<tx:method name="save*" propagation="REQUIRED"/>

<tx:method name="insert*" propagation="REQUIRED"/>

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="delete*" propagation="REQUIRED"/>

<tx:method name="remove*" propagation="REQUIRED"/>

<tx:method name="execute*" propagation="REQUIRED"/>

<tx:method name="del*" propagation="REQUIRED"/>

<tx:method name="*" read-only="true"/>

</tx:attributes>

</tx:advice>

<aop:config proxy-target-class="true" expose-proxy="true">

<aop:pointcut id="pt" expression="execution(public * com.xxx.xxx.*.*(..))" />

<aop:advisor order="200" pointcut-ref="pt" advice-ref="txAdvice"/>

</aop:config>

</beans>

配置到这里,测试mybatis 是否是正常使用,

新建一个controller ,写个test方法,

@RestController

@RequestMapping("/process")

public class ProcessController {

@Autowired

ProcessService processService;

@RequestMapping("/test")

public Result test(){

Result result = new Result();

String test = processService.getUsername();

result.setData(test);

return result;

}

}

写一个service 

@Service

public class ProcessService {

@Autowired

ProcessMapper processMapper;

public String getUsername(){

return processMapper.getUserName();

}

}

写一个mapper

public interface ProcessMapper {

public String getUserName();

}

新建一个xml

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

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<!--namespace就是与此文件对应的Dao接口的全路径 -->

<mapper namespace="com.pactera.abs.activity.mapper.ProcessMapper">

<!--自己配置的查询表所有数据的sql -->

<!--如下type的PrintField就是mybatis-config.xml中配置的PrintField -->

<!-- <select id="selectAllUser" resultType="PrintField"> -->

<!-- resultMap是上面resultMap的id -->

<select id="getUserName" resultType="java.lang.String">

select usernamezw FROM user where username="1"

</select>

</mapper>

在application,加载刚才的配置

@SpringBootApplication

@EnableDiscoveryClient

@MapperScan("com.xxx.xxx.activity.mapper")

@ImportResource("classpath:spring-application.xml")

public class ActivityApplication {

public static void main(String[] args) {

SpringApplication.run(ActivityApplication.class,args);

}

}

访问这个方法,成功返还字符串

OK,mybatis 已整合成功

 

三、好了,springboot 整合mybatis 3.1.1已经成功了,不要忘记我们的初衷,是在spring boot 中使用activity 5.12

1)新建activiti.cfg.xml

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

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl" />

<property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver"/>

<property name="jdbcUsername" value="XXX"/>

<property name="jdbcPassword" value="XXX123"/>

<property name="databaseSchemaUpdate" value="true"/>

<property name="transactionsExternallyManaged" value="true"/>

</bean>

</beans>

2)编写一个初始化activiti 5.12 的类,这里不直接在spring 初始化bean 是因为,需要读取activiti.cfg.xml 后build一个实例出来,高版本集成

spring 后可以在spring 配置时初始化bean,像5.12这种老版本,我只能想到时这样使用了

@Component

public class ProcessInit {

@Autowired

ProcessEngine processEngine;

@Bean

ProcessEngine processEngine(){

return ProcessEngines.getDefaultProcessEngine();

}

@Bean

RepositoryService repositoryService(){

return processEngine.getRepositoryService();

}

}

3)在controller 注解

@Autowired

protected RepositoryService repositoryService;

编写一个方法调用

@RequestMapping("/list")

public String getProcessListPage(){

ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();

// 分页查询

query.listPage(0, 10);

List<ProcessDefinition> list = query.list();

String str = "";

for (ProcessDefinition processDefinition : list) {

str += processDefinition.getName()+",";

System.out.println(processDefinition.getName());

}

return str;

}

可以看到返回的字符串,OK,成功,大功告成,

转载请注明出处

以上是 最近整合springboot+mybatis3.1.1+activity5.12 的全部内容, 来源链接: utcz.com/z/512312.html

回到顶部