Apache ShardingSphere是一组款开源的分布式数据库中间件,由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三款产品组成。其中sharding-jdbc主要提供分库分表、读写分离、分片策略、分布式主键、分布式事务、数据治理相关功能。
Sharding框架默认不支持DM数据库,本文提供了修改sharding-jdbc支持DM库的方法。
修改使用实现原有接口的方式,不用修改源码重新打包。
实现该接口用于支持DM数据库类型并解析DM URL字符串
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) {
System.out.println("url-----------------"+url);
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;
}
语法解析使用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);
}
@Override
public DatabaseType getTrunkDatabaseType() {
return DatabaseTypes.getActualDatabaseType("Oracle");
}
新增org.apache.shardingsphere.spi.database.type.DatabaseType文件,内容:
com.example.demo.zhao.DMDatabaseType
spring.shardingsphere.datasource.names=m1,m2
# ?????????????
spring.main.allow-bean-definition-overriding=true
# ?????????????????????????????
#spring.shardingsphere.datasource.jdbcUrl=jdbc:dm://192.168.31.254:5236/SYSDBA1
#spring.datasource.druid.url=jdbc:dm://192.168.31.254:5236/SYSDBA1
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=dm.jdbc.driver.DmDriver
#spring.shardingsphere.datasource.m1.jdbc-url=jdbc:dm://192.168.31.254:5236/SYSDBA1
#spring.shardingsphere.datasource.m1.jdbc-url=jdbc:dm://127.0.0.1:5236/SYSDBA1
spring.shardingsphere.datasource.m1.url=jdbc:dm://127.0.0.1:5236
#spring.shardingsphere.datasource.m1.username=SYSDBA
spring.shardingsphere.datasource.m1.username=PAY_ORDER1
#spring.shardingsphere.datasource.m1.password=SYSDBA
spring.shardingsphere.datasource.m1.password=123456789
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=dm.jdbc.driver.DmDriver
#spring.shardingsphere.datasource.m2.jdbc-url=jdbc:dm://127.0.0.1:5236/SYSDBA2
#spring.shardingsphere.datasource.m2.url=jdbc:dm://127.0.0.1:5236/SYSDBA2
spring.shardingsphere.datasource.m2.url=jdbc:dm://127.0.0.1:5236
spring.shardingsphere.datasource.m2.username=PAY_ORDER2
#spring.shardingsphere.datasource.m2.password=SYSDBA
spring.shardingsphere.datasource.m2.password=123456789
# ??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
spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Properties文件中需要添加dm方言配置
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DmDialect
文章
阅读量
获赞