水表 2016-11-24 09:07 采纳率: 0%
浏览 8807

spring动态加载数据源+动态添加数据源

相信很多开发者也遇到过这样的问题,随着项目的增大,使用的数据源会越来越多,现在比较流行配置数据源的方法是在xml配置文件配置数据源,
图片说明
再继承类AbstractRoutingDataSource
图片说明
这样做是挺麻烦的,每添加一个数据源,都要做重复的工作,而且好多代码都是重复的。
现在小弟的做法是,把xml的配置转到用java代码装配,数据源参数从数据库获取,按xml配置文件的意思,只要给AbstractRoutingDataSource里的targetDataSources(数据源集合)和defaultTargetDataSource(默认数据源)初始化就好。
具体代码如下:
图片说明
图片说明
图片说明
至此完成从xml配置文件到java代码装配,启动没有问题。使用默认数据源的用户登录系统没有问题,但当使用非默认数据源用户登录系统时,会提示找不到用户,难道加载数据源出问题?只成功加载了默认数据源?但是断点跟踪,数据源集合targetDataSources是有值的。使用其他数据源的用户登录时,下面这个方法也是有返回值的:
图片说明
百思不得其解!有做过这方面的大神可以给点建议吗?
还有一个问题,数据源集合是在系统启动时加载的,如果我在数据库添加多一个数据源,那又怎样可以不用重启系统就可以直接访问这个数据源对应的数据库呢?
在此先谢了!
2016-11-29更新解决办法
动态切换数据源解决办法:原来的配置文件里的数据源集合的key用的是DataSourceType,而我手动装配数据源用的是
图片说明
装配数据源地方的代码修改如下:
图片说明
改后可以自由切换数据源。现在剩下动态添加数据源没有实现。
DataSourceType类型是一个枚举类型。

动态加载数据源关键一点:在系统运行时加载多一个数据源,加载此数据源的对象必须和系统启动时加载数据源的同一个,在我这里加载数据源的对象是类DynamicDataSource,可在这里添加一个加载数据源的方法:
图片说明
至于如何得到同一个是类DynamicDataSource,可以在系统启动时在某个地方保存一份此对象,就像保存数据源一样,当需要使用数据源时可以获取。

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2016-11-26 15:41
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料