查看启动日志,发现数据源初始化时,postgresql数据源特别慢,耗时30秒~2分钟,Debug发现慢在loadDefaultTables方法。
Mysql数据源,getAllTableNames()无返回值,而postgresql数据源返回了200多个表名,随着表的增加,postgresql数据源的初始化将会越来越慢。
由于项目只访问postgresql中的几个分表,可考虑只加载分表,不加载其他表,即不进入下面这段代码:
if (actualDefaultDataSourceName.isPresent()) { ?? ?Iterator var4 = this.getAllTableNames((String)actualDefaultDataSourceName.get()).iterator();
?? ?while(var4.hasNext()) { ?? ??? ?String each = (String)var4.next(); ?? ??? ?result.put(each, this.tableMetaDataLoader.load(each, shardingRule)); ?? ?} }
故考虑重写ShardingRule的findActualDefaultDataSourceName()方法,使返回值不是Present。
重写代码如下:
public class ShardingRuleLocal extends ShardingRule {
public ShardingRuleLocal(ShardingRuleConfiguration shardingRuleConfig, Collection<String> dataSourceNames) {
super(shardingRuleConfig, dataSourceNames);
}
@Override
public Optional<String> findActualDefaultDataSourceName() {
return Optional.absent();
}
}
建数据源:
new ShardingDataSource(dataSources, new ShardingRuleLocal(shardingRuleConfig, dataSources.keySet()), new ConcurrentHashMap(), properties)
再次启动后加载postgresql数据源的速度提高到了2s。
|