shardingsphere 支持达梦数据库

1、项目中分表分库插件用的是 shardingsphere,现在需要从mysql 数据转移到达梦数据库。

2、但是shardingsphere并不支持达梦数据库,所以查看了源码。基于shardingsphere(4.1.1版本)源码优化了支持达梦数据库大部分sql查询能力,(复合查询需要自己拆解)。

1、第一步 首先找到 

DataSourceMetaData 接口实现该接口  这里需要注意java 包路径 
org.apache.shardingsphere.underlying.common.database.metadata.dialect
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;
    }
}

2、实现

BranchDatabaseType接口 
包路径  org.apache.shardingsphere.underlying.common.database.type.dialect
 * Database type of Oracle.
 */
public final class DMDatabaseType implements BranchDatabaseType {
    
    @Override
    public String getName() {
        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");
    }
}

 解析器 选择的MYSQL, (我测试了下 选择orcal时分页查询会返回多表查询的所有结果。)

当然也可以自己实现解析器

自定义解析器在这个包路径 自己新建一个达梦模块就好。</

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

carry杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值