开发者社区> 问答> 正文

动态配置了ActiveRecordPlugin,怎么获取删除?:报错

DruidPlugin ds = new DruidPlugin(acsUrl,acsuser,acspawd,acsdriver);
ds.start();
ActiveRecordPlugin arp = new ActiveRecordPlugin("module",ds);

arp.start();

我用上面的代码,配置了ActiveRecordPlugin,但是我需要切换使用的数据库文件,那我怎么删除这个ActiveRecordPlugin 和DruidPlugin 而重新配置?

又或者是,直接更改DruidPlugin的url?

@JFinal

展开
收起
kun坤 2020-06-06 14:14:29 582 0
1 条回答
写回答
取消 提交回答
  • 调用ActiveRecordPlugin和DruidPlugin的stop()方法,重新按新数据库配置构建DruidPluginActiveRecordPlugin两个插件。

    注意,Config名不能使用之前已经用过的名字,不然会报重名异常。。。这是 @JFinal 作者波总没写好,DbKit方法中只有addConfig(),没有removeConfig()。

    ######回复 @子寒 : close()掉再使用是没有问题的,你用JDBC Connection close后修改连接参数再open试试就知道,你重用它就不会多余。不想重用就设置它=null就好。######回复 @糊搞 : close之后就不会多余了? close不是remove吧,能dispose掉?######回复 @子寒 : 会有多余的Config,但ActiveRecordPlugin和DruidPlugin实例可以使用原来close()后的实例,这样就不会多余了。。。######那不就会有多余的plugin?######并且切换后,configname我希望是不变的######

    引用来自“子寒”的评论

    并且切换后,configname我希望是不变的
    我刚看了ActiveRecordPlugin.start()源码:
    if (config == null)
    	config = new Config(configName, dataSource, dialect, showSql, devMode, transactionLevel, containerFactory, cache);
    DbKit.addConfig(config);

    只要不重新创建ActiveRecordPlugin实例,就会延用原来的configName。


    ######

    @JFinal

    有办法删除已配置的ActiveRecordPlugin和DruidPlugin吗?或者直接重置对应的数据库url

    ######

         试试将注入过去的那个 DruidPlugin 对先 dp.stop() 一次,然后再 dp.setXxxx(...) 重新配置一下,无法重新设置的用一下反射,然后再 dp.start() 一次即可。

        jfinal 2.0 提供了一个 DbKit.remove(configName) 方法,可以对 config 对象进行动态管理,这样就可以动态 druid.stop() 和重新创建了,并且 2.0 会在 ActiveRecordPlugin.stop() 时 DbKit.remove(configName) 掉所对应的 config 对象。

    ######回复 @子寒 : 正开发######哦,2.0发布了吗?
    2020-06-06 14:14:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载