shardingSphere 适配达梦数据库

shardingSphere 官方声明支持任意实现JDBC规范的数据库,但是目前支持的数据库有MySQL,Oracle,SQLServer和PostgreSQL。对达梦数据库并不适配,如果要使用shardingSphere对达梦数据库进行操作,需要对shardingSphere 进行扩展,具体操作步骤如下:

1、在自己项目中引入shardingSphere的依赖:这里以4.1.1的版本为例,这里要说明的是,不同版本的shardingSphere对数据库类型的声明代码文件的位置不同,在进行扩展时要注意版本。

<dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
 </dependency>

2、在自己的项目中新建两个类:

1.DMDatabaseType

package com.example.shardingdemo.util;
​
import org.apache.shardingsphere.spi.database.type.BranchDatabaseType;
import org.apache.shardingsphere.spi.database.type.DatabaseType;
import org.apache.shardingsphere.underlying.common.database.type.DatabaseTypes;
​
import java.util.Collection;
import java.util.Collections;
​
/**
 * Database type of Oracle.
 */
public final class DMDatabaseType implements BranchDatabaseType {
​
    @Override
    public String getName() {
        System.out.println("获取达梦名称");
        return "DM";
    }
​
    @Override
    public Collection<String> getJdbcUrlPrefixAlias() {
        return Collections.emptyList();
    }
​
    @Override
    public DMDataSourceMetaData getDataSourceMetaData(final String url, final String username) {
        return new DMDataSourceMetaData(url, username);
    }
​
    //作为MySQL的子集,sql解析等操作使用MySQL的实现
    @Override
    public DatabaseType getTrunkDatabaseType() {
        return DatabaseTypes.getActualDatabaseType("MySQL");
    }
}
  1. DMDataSourceMetaData

    package com.example.shardingdemo.util;
    ​
    import com.google.common.base.Strings;
    import lombok.Getter;
    import org.apache.shardingsphere.spi.database.metadata.DataSourceMetaData;
    import org.apache.shardingsphere.underlying.common.database.metadata.UnrecognizedDatabaseURLException;
    ​
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    ​
    /**
     * Data source meta data for Oracle.
     */
    @Getter
    public final class DMDataSourceMetaData implements DataSourceMetaData {
    ​
        private static final int DEFAULT_PORT = 5236;
    ​
        private final String hostName;
    ​
        private final int port;
    ​
        private final String catalog;
    ​
        private final String schema;
    ​
        private final Pattern pattern = Pattern.compile("jdbc:dm://([\\w\\-\\.]+):?([0-9]*)/([\\w\\-]+)", Pattern.CASE_INSENSITIVE);
    ​
        public DMDataSourceMetaData(final String url, final String username) {
            Matcher matcher = pattern.matcher(url);
            if (!matcher.find()) {
                throw new UnrecognizedDatabaseURLException(url, pattern.pattern());
            }
            hostName = matcher.group(1);
            port = Strings.isNullOrEmpty(matcher.group(2)) ? DEFAULT_PORT : Integer.valueOf(matcher.group(2));
            catalog = matcher.group(3);
            schema = username;
    ​
    ​
    ​
        }
    }

    利用spi机制,Resource下面创建META-INF/services 目录里创建一个以服务接口命名的文件,4.1.1版本的shardingSphere的文件名称为:org.apache.shardingsphere.spi.database.type.DatabaseType,在文件中加上DMDatabaseType类的路径。

    效果图为:

以上步骤就是给shardingSphere进行了外部拓展,使其适配了达梦数据库。

接下来就是在配置文件中配置好数据源和分片规则,就可以使用shardingSphere对达梦数据库进行分库分表操作了。以下是配置文件的相关代码:这里要注意的是,shardingSphere和shardingJDBC的配置是不一样的,不能混用,要不然报错。

server.port=8082
# sharding-jdbc 水平分表策略
# 配置数据源,给数据源起别名
spring.shardingsphere.datasource.names=m1,m2
​
# 一个实体类对应两张表,覆盖
spring.main.allow-bean-definition-overriding=true
​
# 配置数据源的具体内容,包含连接池,驱动,地址,用户名,密码
spring.shardingsphere.datasource.m1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.m1.driver-class-name=dm.jdbc.driver.DmDriver
spring.shardingsphere.datasource.m1.jdbc-url=jdbc:dm://localhost:5236/W
spring.shardingsphere.datasource.m1.username=SYSDBA
spring.shardingsphere.datasource.m1.password=
​
spring.shardingsphere.datasource.m2.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.m2.driver-class-name=dm.jdbc.driver.DmDriver
spring.shardingsphere.datasource.m2.jdbc-url=jdbc:dm://localhost:5236/H
spring.shardingsphere.datasource.m2.username=SYSDBA
spring.shardingsphere.datasource.m2.password=
​
​
# 指定course表分布的情况,配置表在哪个数据库里,表的名称都是什么 m1.course_1,m1.course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$->{1..2}
spring.shardingsphere.sharding.tables.course1.actual-data-nodes=m2.course1_$->{1..2}
​
# 指定 course 表里面主键 cid 的生成策略 SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
​
spring.shardingsphere.sharding.tables.course1.key-generator.column=cid1
spring.shardingsphere.sharding.tables.course1.key-generator.type=SNOWFLAKE
​
#spring.shardingsphere.sharding.tables.course.key-generator.type=AtomicLong
​
# 配置分表策略    约定 cid 值偶数添加到 course_1 表,如果 cid 是奇数添加到 course_2 表
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 2 + 1}
​
spring.shardingsphere.sharding.tables.course1.table-strategy.inline.sharding-column=cid1
spring.shardingsphere.sharding.tables.course1.table-strategy.inline.algorithm-expression=course1_$->{cid1 % 2 + 1}
# 打开 sql 输出日志
spring.shardingsphere.props.sql.show=true
​

到这里为止,就可以使用shardingSphere对达梦数据库进行基本的分库分表的操作了,更多的功能还没有进行研究,还是希望达梦官方可以对分库分表进行更多的支持,有更成熟的落地方案。 

flowable是一个开源的工作流引擎,它基于BPMN 2.0标准,并提供了实现业务流程的功能。达梦数据库是一种国产的数据库管理系统。那么如何将flowable适配达梦数据库呢? 首先,通过flowable的数据库适配器功能,我们可以将flowable连接到达梦数据库。flowable支持自定义数据库配置,可以通过更改配置文件来指定达梦数据库的连接信息,包括数据库类型、地址、用户名和密码等。通过修改相应的配置,我们可以确保flowable能够正确地连接到达梦数据库。 其次,flowable使用了标准的JDBC接口与数据库进行交互。因此,只要达梦数据库提供了JDBC驱动程序,flowable就可以通过该驱动程序与达梦数据库进行通信。可以从达梦官方网站下载并安装达梦数据库的JDBC驱动程序,并将其配置为flowable所需的驱动程序。 最后,我们还需要确保达梦数据库与flowable的数据库结构兼容。在flowable的环境下,数据库中会创建一系列的表和视图来存储流程定义、流程实例、任务、历史记录等信息。我们需要确保这些表和视图在达梦数据库中正确创建,并具有适当的字段和关系。 总结来说,要使flowable适配达梦数据库,我们需要: 1. 修改flowable的数据库配置,以连接到达梦数据库。 2. 安装达梦数据库的JDBC驱动程序,并配置给flowable使用。 3. 确保达梦数据库与flowable的数据库结构兼容。 通过以上的适配工作,我们可以成功地将flowable与达梦数据库进行整合,实现业务流程的管理和执行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值