改进架构,实现动态数据源,减少java维护
怎样不用写java代码来完毕开发?
对于大部分的产品和项目来说。页面变化是很头痛的事情。每次小功能上线,新客户到来,都须要进行定制改造,不断的开发维护。每次开发一方面要修改页面,一方面要修改server代码,然后部署。而借助动态数据源。能够不用开发后端应用,直接完毕功能开发。
新功能开发时,仅仅须要定义须要的数据格式和获取方法,如通过xml上传1个sql语句,系统依据sql语句自己主动提取数据并转成通用的格式。开发过程中,后台java开发部分仅仅是写好sql而且上传,这样前台通过某一个servlet能够动态的读取运行sql,并将结果依照json返给前端。以后全部的开发仅仅须要前端做ajax实现页面就可以。

完整业务流程例如以下:
1. 用户在前端操作,如须要读取经济类图书。
2. 前端js推断是什么操作,然后发送ajax请求到:http://services.guzz.org/commonServlet?id=f2354239sfASASFASfasf6&catId=47&keyword=jingji.....
3. server端有一个类似dispatcher-servlet的东西(我们这儿的commonServlet)。拦截请求,依据id知道载入数据须要运行名称为f2354239sfASASFASfasf6的sql文件。运行时须要參数:catId=47和keyword=jingji
4. commonServlet从文件系统中读取f2354239sfASASFASfasf6.xml文件(这个文件在一个隐藏的文件夹下。从浏览器是不能直接获取到的。集群环境会存放在集中存储上),解析sql以及对象映射ORM。
5. commonServlet打开数据库连接,依据sql构造查询语句,将第一步传入的參数所有作为命名參数传给查询语句,运行查询。
6. commonServlet把查询的ResultSet依据ORM转成java类,再转成json。返回前台。
7. 前台依据json构造出页面并展示。结束流程。
在整个过程中。有2个关键步骤,一是动态载入SQL并进行ORM映射,一是自己主动进行sql所须要參数的类型转换和匹配。进行命名查询。假设系统规模较大,还须要解决查询时分库分表的问题。对于这样的sql使用方式,因为在系统上线时,并不知道以后会用哪些sql语句,我们称作动态SQL。
实现方式:
步骤1. 实现servlet。定义一个普通的servlet,或者jsp,或者webwork/spring action,接收參数,获取到sql的id。以及全部传入的參数。然后转入处理类处理。处理完毕后,将返回结果转成json返回前端。
步骤2. 实现动态SQL载入与查询。处理类依据id载入sql并运行。返回数据库查询结果。guzz 1.2.8 beta2提供了动态SQL服务。依据此服务能够直接实现此功能。
优点:
实现以后。基本上后台开发就会非常稳定非常稳定了,大部分的工作仅仅是前端做页面。能够大幅度的减少开发成本。提高开发进度。
上面的实现是以上传文件来定义和管理sql,也能够通过数据库来管理。
这样管理起来更加简单。
假设使用guzz作为动态SQL提供者。能够自己主动获得命名查询,类型自己主动匹配(转成枚举类型都能够),分库。自己主动分切表。自己定义属性表等附加支持。
啧啧~~
改进架构,实现动态数据源,减少java维护的更多相关文章
- Java注解--实现动态数据源切换
当一个项目中有多个数据源(也可以是主从库)的时候,我们可以利用注解在mapper接口上标注数据源,从而来实现多个数据源在运行时的动态切换. 实现原理 在Spring 2.0.1中引入了Abstract ...
- SaaS 系统架构,Spring Boot 动态数据源实现!
这段时候在准备从零开始做一套SaaS系统,之前的经验都是开发单数据库系统并没有接触过SaaS系统,所以接到这个任务的时候也有也些头疼,不过办法部比困难多,难得的机会. 在网上找了很多关于SaaS的资料 ...
- Java:基于AOP的动态数据源切换(附源码)
1 动态数据源的必要性 我们知道,物理服务机的CPU.内存.存储空间.连接数等资源都是有限的,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈.而在复杂的互联网业务场景下,系统流量日益膨 ...
- SpringBoot整合MyBatisPlus配置动态数据源
目录 SpringBoot整合MyBatisPlus配置动态数据源 SpringBoot整合MyBatisPlus配置动态数据源 推文:2018开源中国最受欢迎的中国软件MyBatis-Plus My ...
- Spring动态数据源-AbstractRoutingDataSource
在分库分表的情况下,在执行SQL时选择连接不同的数据源(库)的思路:配置多个数据源加到动态数据源对象中,根据实际的情况动态切换到相应的数据源中. 如存放订单信息的有10个库,每个库中有100张表,根据 ...
- nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken
nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...
- 43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- Spring Boot:实现MyBatis动态数据源
综合概述 在很多具体应用场景中,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据 ...
随机推荐
- Javascript - Vue - 指令
指令 v-cloak 解决闪烁,闪烁是指在网速较慢的情况下可能会出现插值表达式{{}}还没有填充数据时会把该表达式直接显示在页面上,如果不希望看到插值表达式则可以使用v-cloak指令,具体做法如下 ...
- Java练习之使用StringBuilder
package string.demo; /* * 将数组变为字符串输出 */ public class StringBuilderTest { /** * @param args */ public ...
- MFC小型工具通用界面框架CLIST控件+右键菜单功能
MFC-小型工具通用界面框架 0x1 场景 由于工作需要我会写代码开发工具给客户或者同事用.代码都能实现,但写个黑乎乎的命令行工具给别人用确实显得不够专业,用别人写好的成型工具又担心有后门. 所以掌握 ...
- 如何提升mysql replication的性能&多线程传输二进制日志
1,最好使用内网或者专线链路传输binlog数据 (千兆网卡.还不够的话,bounding 技术,扩展带宽) 在my.cnf中强制使用内网ip传输数据bind-address=ip2,将二进制保存在独 ...
- screen命令记录
1.screen -x 进入 2.ctrl+a+n 下一个 3.ctrl+a+p 上一个任务 4.ctrl+a+d 退出 5.ctrl+c 结束任务 其他 screen -ls 所有任务 screen ...
- 在VMware上安装Ubuntu软件步骤与遇到的相关问题及解决方案
图解演示环境版本: 本机系统: WIN10 虚拟机:VMware Workstation 12(中文版) 安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像 ...
- 八、vue使用element-ui组件
element-ui组件 1.引入element import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element- ...
- Java @Override 注解
@Override注解,不是关键字,但可以当关键字使用,可以选择添加这个注解,在你不留心重载而并非复写了该方法时,编译器就会产生一条错误:The method doh(Milhouse) of typ ...
- Eclipse 的一些调试技巧(转)
原文:http://blog.csdn.net/manymore13/article/details/8972602 1.条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建. ...
- nginx支持ssl双向认证配置
nginx支持ssl双向认证配置 listen 443; server_name test.com; ssl on; ssl_certificate server.crt; //server端公钥 s ...