改进架构,实现动态数据源,减少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数据库等,都可以使用动态数据 ...
随机推荐
- 在vue-cli下读取模拟数据请求服务器
写此记录时vue脚手架的webpack是3.6.0 此文章方法亦可用于vue-cli3,直接在vue.config.js里面添加 本记录使用vue-resource,先安装: cnpm install ...
- 04 uni-app框架学习:禁用顶部原生导航栏
1.在pages.json中配置 比如要首页禁用 就在首页这个选项里 加上这几句代码 2.效果如下
- 如何使用jpegtran 压缩JPG图片
说到jpegtran相信很多人都比较陌生,网上相关的资料也很少. jpegtran可以让图片更加的简化,缩小图片的容量,从而增加网络的传输速度.说在多你也不信,下面就让事实证明. 首先下载 jpeg ...
- phantomjs 长图截屏
var page = require('webpage').create(); var url = 'http://cardloan9.hateblo.jp/'; page.settings = { ...
- javascript 模拟按键点击提交
上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...
- vue 数组
今天项目中发现的一个问题: 在vue项目中输出一个数组,明明有俩个值:0,6,但是length为1 正常的是这样的 结果研究发现,是vue源码的问题,具体内容如下: 转载自:http://www.cn ...
- jira ao UpgradeTask
插件发布到市场后,后续版本迭代的过程中,可能会对ao实体类的字段作添加或删除,或者要将某一字段的值映射解析到另一字段上. 本来这个工作,可以在插件启动的时候,在实现了com.atlassian.sal ...
- window批处理——bat文件的编写
BAT 批处理脚本 教程 第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命 ...
- SpringMVC的@RequestMapping和Controller方法返回值
本节内容: @RequestMapping Controller方法返回值 一.@RequestMapping 通过@RequestMapping注解可以定义不同的处理器映射规则. 1. URL路径映 ...
- form的智能表单
1.智能表单的介绍 其中,(1)中的使用格式使得form不会太臃肿. 2.使用规范 3.新属性 4.举例 二.程序 1.关于邮件的问题 <!DOCTYPE html> <head&g ...