不让sharding加载元数据的流程如下:

  1. 禁用ShardingSphere的元数据加载功能。
  2. 手动加载元数据到ShardingSphere。

下面是每个步骤的具体操作及代码示例:

  1. 禁用ShardingSphere的元数据加载功能。
ShardingSphereDataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);
dataSource.getMetaDataContexts().getMetaDataPersistService().ifPresent(service -> service.close());

代码解释:

  • 首先,我们创建了一个ShardingSphere的数据源对象dataSource。这里的dataSourceMap是数据源的配置信息,shardingRuleConfig是ShardingSphere的分片规则配置,props是其他配置属性。
  • 然后,我们通过dataSource.getMetaDataContexts().getMetaDataPersistService()方法获取到元数据的持久化服务对象。
  • 最后,我们调用close()方法关闭元数据的持久化服务,从而禁用ShardingSphere的元数据加载功能。
  1. 手动加载元数据到ShardingSphere。
String schema = "your_schema";
String table = "your_table";
String logicTable = "your_logic_table";
String actualTable = "your_actual_table";

TableMetaData tableMetaData = new TableMetaData(Arrays.asList(new ColumnMetaData("your_column", "INT", false, false, false)), Collections.emptySet());
ShardingSphereMetaData metaData = new ShardingSphereMetaData(schema, Collections.singletonMap(table, tableMetaData));
dataSource.getMetaDataContexts().getMetaDataPersistService().ifPresent(service -> service.getMetaDataMap().put(logicTable, metaData));
dataSource.getMetaDataContexts().getDefaultMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().put(logicTable, table);

代码解释:

  • 首先,我们定义了一些变量,分别表示数据库的schema名称、表名称、逻辑表名称和实际表名称。
  • 然后,我们创建了一个TableMetaData对象,表示表的元数据信息。这里的ColumnMetaData表示表的列信息,具体根据实际情况进行定义。
  • 接下来,我们创建了一个ShardingSphereMetaData对象,表示ShardingSphere的元数据信息。这里的schema表示schema名称,tableMetaData表示表的元数据信息。
  • 然后,我们通过dataSource.getMetaDataContexts().getMetaDataPersistService()方法获取到元数据的持久化服务对象。
  • 最后,我们通过put()方法将逻辑表名称和元数据信息添加到元数据的持久化服务中,从而手动加载元数据到ShardingSphere。

下面是关系图:

erDiagram
    schema ||--o table : owns
    table ||--o column : has

关系图解释:

  • 一个schema可以拥有多个表。
  • 一个表可以有多个列。

总结:通过上述步骤,我们可以实现不让ShardingSphere加载元数据的功能。首先禁用ShardingSphere的元数据加载功能,然后手动加载元数据到ShardingSphere。这样就可以自定义元数据的加载方式,满足特定需求的场景。