主库通过configPlugin配置,然后其他40多个数据库在afterJFinalStart中读取其他数据库配置表,使用非web形式遍历配置,大致如下
for(AppConfig acf:appConfigs ){ DruidPlugin druidPlugin = new DruidPlugin(jdbcUrl, username, password, PropKit.get("jdbcDriverSqlServe")); druidPlugin.addFilter(new StatFilter());//sql 监控 WallFilter wall = new WallFilter(); wall.setDbType("sqlserver"); druidPlugin.addFilter(wall); druidPlugin.start(); Boolean devMode = PropKit.getBoolean("devMode", false); Config config = new Config(configName, druidPlugin.getDataSource(), new NewSqlServerDialect(), devMode, devMode, DbKit.DEFAULT_TRANSACTION_LEVEL, IContainerFactory.defaultContainerFactory, new EhCache()); ActiveRecordPlugin arp = new ActiveRecordPlugin(config); arp.start(); }
现在项目启动要51700 ms,主要是这个遍历配置很耗时间,是不是我的使用方式不对?
调用这个方法进行设置, DruidPlugin.setInitialSize(1) , 注意是每个 DruidPlugin 对象都要调用一次
setInitialSize 这个参数仅仅是初始化的连接数目,默认是 10,而你有几十个数据库,那么启动的时候默认就是几百个连接, 要知道数据库建立连接是很耗时间的
setInitialSize 这个不影响后续的性能,因为 maxActive 没动过