1、迁移流程表结构及数据
通过虚谷官方提供的XuguMigrator-11.4.0.202301130943-RELEASE-win-x64
迁移工具,把流程引擎的表全部迁移到虚谷数据库
2、引入jdbc的jar
引入虚谷伟业db依赖
<!-- 引入虚谷伟业db依赖 -->
<dependency>
<groupId>XuGuDB</groupId>
<artifactId>XuGuDB</artifactId>
<version>12.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/xugu-jdbc-12.0.0.jar</systemPath>
</dependency>
注册虚谷JDBC驱动程序
try {
Class.forName("com.xugu.cloudjdbc.Driver");
} catch (ClassNotFoundException e) {
log.error("-========================== 注册虚谷JDBC驱动程序 [失败] =====================");
}
3、flowable.common.engine核心配置修改
在项目中创建org.flowable.common.engine.impl.AbstractEngineConfiguration
文件【java目录下】(package路径必须一致,打包时会覆盖源文件)
// 数据库标识为mysql(通用mysql)
// key 名称不能变,作为productName这是厂商规定的
databaseTypeMappings.setProperty("XuGU", DATABASE_TYPE_MYSQL);
4、liqiubase核心配置修改
* [xugu的修改方式]
* liquibase官网版本支持的数据库类型有:cockroachdb、db2、db2z、Derby、firebird、H2、hsqldb、informix,
* ingres、MariaDB、mock、Microsoft SQL Server、MySQL、Oracle、Postgres、Sqlite、Sybase。
* 对国产化数据库适配至少需要进行如下的修改
* <p>
* 1.创建DmDatabase,继承AbstractJdbcDatabase,具体的类实现从MySqlDatabase类中复制,然后进行如下修改
* <p>
* 删除setConnection方法;
* 修改PRODUCT_NAME常量值为“XuGU”
* 修改getDefaultPort方法,返回5138
* 修改getShortName方法,返回xugu
* 修改getDefaultDriver方法,返回虚谷的Driver
-
4.1、先在本地创建对应package下的class
package liquibase.database.core;
-
4.2、把对应源码先拷贝过来再修改
- 删除setConnection方法;
- 修改PRODUCT_NAME常量值为“XuGU”
- 修改getDefaultPort方法,返回5138
- 修改getShortName方法,返回xugu
- 修改getDefaultDriver方法,返回虚谷的Driver
-
4.3、源码替换
-
4.3.1、把进行mvn clean package后的class文件拷贝出来
-
4.3.2、把源码所在的jar也拷贝出来
-
4.3.3、具体替换源码操作
- 源码解压后进入到对应的目录下进行class替换
- 然后再重新压缩成zip
- 把后缀zip替换成jar文件
- 把jar文件再重新放回到原来的仓库中
-
4.4、修改package liquibase.database下AbstractJdbcDatabase
- 操作和以上一样,修改为虚谷支持的语法
protected SqlStatement getConnectionSchemaNameCallStatement() throws DatabaseException {
if ("XuGU".equalsIgnoreCase(connection.getDatabaseProductName())){
return new RawCallStatement("select current_schema");
}
return new RawCallStatement("call current_schema");
}
4.5、修改resources/META-INF.services/liquibase.database.Database内容,增加XuGUDatabase支持
没有此文件的直接新增
liquibase.database.core.CockroachDatabase
liquibase.database.core.DB2Database
liquibase.database.core.Db2zDatabase
liquibase.database.core.DerbyDatabase
liquibase.database.core.Firebird3Database
liquibase.database.core.FirebirdDatabase
liquibase.database.core.H2Database
liquibase.database.core.HsqlDatabase
liquibase.database.core.InformixDatabase
liquibase.database.core.Ingres9Database
liquibase.database.core.MSSQLDatabase
liquibase.database.core.MariaDBDatabase
liquibase.database.core.MockDatabase
liquibase.database.core.MySQLDatabase
liquibase.database.core.OracleDatabase
liquibase.database.core.PostgresDatabase
liquibase.database.core.SQLiteDatabase
liquibase.database.core.SybaseASADatabase
liquibase.database.core.SybaseDatabase
liquibase.database.core.XuGUDatabase
liquibase.database.core.UnsupportedDatabase
5、配置MyBatis-Plus
- 添加依赖项:在
pom.xml
文件中添加MyBatis-Plus和虚古伟业数据库的依赖项。示例:
<dependencies>
<!-- 其他依赖项 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.xugu.cloud</groupId>
<artifactId>xugu</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
- 配置数据源:在
application.yml
(或application.properties
)文件中配置数据源和MyBatis-Plus相关的配置项。示例:
spring:
datasource:
url: jdbc:xugu://localhost:5138/database_name
username: your_username
password: your_password
# 配置MyBatis-Plus
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
type-aliases-package: com.example.entity
请确保将上述示例中的数据库连接URL、用户名和密码替换为实际的值。mapper-locations
配置指定了MyBatis-Plus的XML映射文件所在的路径,type-aliases-package
配置指定了实体类的包路径。
- 创建实体类:创建与数据库表对应的实体类。示例:
package com.example.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user") // 表名映射
public class User {
private Long id;
private String name;
private Integer age;
// 其他属性...
}
请确保实体类上使用了@TableName
注解,并指定了对应的表名。
- 创建Mapper接口:创建继承自
BaseMapper
的Mapper接口,用于执行数据库操作。示例:
package com.example.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
public interface UserMapper extends BaseMapper<User> {
// 可以添加自定义的查询方法
}
- 创建Service层:创建对应的Service层,用于调用Mapper接口中的方法执行数据库操作。示例:
package com.example.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;
public interface UserService extends IService<User> {
// 可以添加自定义的业务方法
}
- 创建ServiceImpl实现类:创建Service层的实现类,继承自
ServiceImpl
,并实现自定义的业务方法。示例:
package com.example.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 可以实现自定义的业务方法
}
以上代码示例中,UserMapper
是创建的Mapper接口,User
是对应的实体类。
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getById(id);
}
// 其他接口...
}
数据库时间字段
有些常用字段的映射关系变了,具体的参考官方文档