博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jfinal相关
阅读量:4618 次
发布时间:2019-06-09

本文共 2311 字,大约阅读时间需要 7 分钟。

比较喜欢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
多数据源方式:

@Overridepublic 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,数据源b    ActiveRecordPlugin 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,数据源b    ActiveRecordPlugin 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);}

 

转载于:https://www.cnblogs.com/yinlixin/p/8443883.html

你可能感兴趣的文章
[周记]8.7~8.16
查看>>
递归定义
查看>>
kindeditor 代码高亮设置
查看>>
图的邻接表存储
查看>>
2018 leetcode
查看>>
各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
查看>>
PHP中获取当前页面的完整URL
查看>>
所谓输入掩码技术,即只有数字键起作用
查看>>
Display对象,Displayable对象
查看>>
安装oracle11G,10G时都会出现:注册ocx时出现OLE初始化错误或ocx装载错误对话框
查看>>
数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
查看>>
生产环境下正则的应用实例(一)
查看>>
在CentOS7命令行模式下安装虚拟机
查看>>
Arduino可穿戴开发入门教程Arduino开发环境介绍
查看>>
Windows平台flex+gcc词法分析实验工具包
查看>>
3.Python基础 序列sequence
查看>>
Chapter 4 Syntax Analysis
查看>>
vi/vim使用
查看>>
讨论Spring整合Mybatis时一级缓存失效得问题
查看>>
Maven私服配置Setting和Pom文件
查看>>