热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

让JFinal的ActiveRecord支持多数据源。

为什么80%的码农都做不了架构师?比较喜欢JFinal简单的设计。但是我们的不少项目都需要连接至少两个数据库,而JFinal的ActiveReco

为什么80%的码农都做不了架构师?>>>   hot3.png

比较喜欢JFinal简单的设计。但是我们的不少项目都需要连接至少两个数据库,而JFinal的ActiveRecord对多数据源支持比较若。周末断断续续花了一天的时间对JFinal进行的ActiveRecord做改造。

设计目标如下:
1)既有的单数据源的JFinal代码不用修改一行代码就可以自然支持。
2)Model,Record都支持多数据源,而且改动量要小。
3)性能不能很大损失。

实现思路:
1)一个数据源即一个分组(group),多个数据源既有多个分组,每个Mode只能属于一个分组。Record不限制分组。
2)default是一个默认分组,当不指定分组名师,默认采用default分组。这个用来解决兼容问题。
3)尽量启动时计算一下,减少每次请求的计算。

实现结果:
1)原来的JFinal方式兼容,但是删除掉了Model和Record中关于DataSource为参数的操作,给位group
多数据源方式:

@Override
public void configPlugin(Plugins me) {//从配置文件中获取数据库配置项PropertyConfig config = PropertyConfig.me();//a数据源DruidPlugin aDruidPlugin = new DruidPlugin(config.getProperty("a.dataSource.url"), config.getProperty("a.dataSource.userName"), config.getProperty("a.dataSource.password"), config.getProperty("a.dataSource.driverClass"));aDruidPlugin.setInitialSize(3).setMaxActive(10);//b数据源DruidPlugin bDruidPlugin = new DruidPlugin(config.getProperty("b.dataSource.url"), config.getProperty("b.dataSource.userName"), config.getProperty("b.dataSource.password"), config.getProperty("b.dataSource.driverClass"));bDruidPlugin.setInitialSize(3).setMaxActive(10);//加载数据库连接池插件me.add(aDruidPlugin);me.add(bDruidPlugin);//分组a,数据源bActiveRecordPlugin aArp = new ActiveRecordPlugin("aGroup",aDruidPlugin);aArp.setShowSql(true);aArp.addMapping("t_admin_user", AdminUser.class);aArp.addMapping("t_charge_history", ChargeHistory.class);aArp.addMapping("t_sms_api_user", SmsApiUser.class);me.add(aArp);//分组b,数据源bActiveRecordPlugin bArp = new ActiveRecordPlugin("bGroup",bDruidPlugin);bArp.setDialect(new PostgreSqlDialect());bArp.setShowSql(true);bArp.addMapping("t_send_message_history", SendMessageHistory.class);me.add(bArp);
}

 

差异在于ActiveRecordPlugin多了一个构造函数。Model的写法和以前一样。不用改变。

如果要在Controller上配置事务(TX系列拦截器)拦截器,configRoute(Routes me) 函数也得做一定改变。若不用事务拦截器,则还和原来一样。使用拦截器的话代码如下:

public void configRoute(Routes me) {me.addWithGroup("aGroup","/", IndexController.class);me.addWithGroup("aGroup","/au",AdminUserController.class);me.addWithGroup("aGroup","/sau", SmsApiUserController.class);me.addWithGroup("bGroup","/smh",SendMessageHistoryController.class);
}



目前代码初步测试还算稳定,待测试一段时间,比较稳定之后,会反馈给@JFinal。目前想尝鲜的可以站内联系我。

转:https://my.oschina.net/myaniu/blog/185331



推荐阅读
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文深入探讨了在Spring Boot中处理RESTful风格的表单请求的方法,包括请求参数处理、请求映射以及RESTful设计原则的应用。文章详细介绍了如何利用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并结合Spring Boot的注解(如@GetMapping、@PostMapping等)实现高效、清晰的请求处理逻辑。通过实例分析,展示了如何在实际项目中应用这些技术,提高开发效率和代码可维护性。 ... [详细]
  • 在近期的项目开发过程中,ORM层采用了MyBatis,并且需要连接多个数据库,这带来了多数据源配置的挑战。为了解决这一问题,我们可以通过巧妙运用注解来实现优雅的数据源切换,确保系统的灵活性和可维护性。这种方法不仅简化了配置,还提高了代码的可读性和扩展性。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
author-avatar
手机用户2502932605
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有