JFinal

登录 注册

(已解决)多数据源下项目启动太慢

主库通过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,主要是这个遍历配置很耗时间,是不是我的使用方式不对?

评论

  • 12-04 12:05
    既然有这么多数据库要建立连接,并且用的是 DruidPlugin,那么将其 initialSize 设置为 1 即可

    调用这个方法进行设置, DruidPlugin.setInitialSize(1) , 注意是每个 DruidPlugin 对象都要调用一次

    setInitialSize 这个参数仅仅是初始化的连接数目,默认是 10,而你有几十个数据库,那么启动的时候默认就是几百个连接, 要知道数据库建立连接是很耗时间的

    setInitialSize 这个不影响后续的性能,因为 maxActive 没动过
  • 12-04 15:07
    @JFinal 嗯,忘了这一茬配置,启动立马缩短10倍时间
  • 12-04 16:05
    @wesleyxw druid 官方设置的默认值是 0 ,其实你还可以将这个值设置为 0,反正不影响 maxActive, 尽可能加快启动速度
  • 12-07 10:58
  • 发送