DB数据源配置之抽象(〇)

liuyuhang原创,未经允许禁止转载

DB数据源之SpringBoot+Mybatis踏坑过程实录(一)

DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

  做java三年多了,换个框架或者设计个架构就会发现,数据源每次都是问题;

  好在网上解决方案很多,然而很少有说明是引用的具体包结构,或者数据源的配置思路;

  不管怎么说,各种框架也提供了各种方式,然而数据源配置依然是坑。

所以好好记录一下,关于数据源配置的问题。本文主要用来回答以下四个问题:

  1.为什么要配置数据源?

  2.数据源配置信息都由什么构成?

  3.数据源配置方式的本质是什么?

  4.数据源为什么会有多种配置方式?

1.为什么要配置数据源?

  菜鸟时期,总在考虑,为啥需要一个properties文件来写个数据源配置,写成xml不行么,写死在java代码中不行么?

  现在想想,当时脑子有点逗,作为极端逻辑主义,电脑是必须明白每一个细节才能够工作的;

  我们的程序是经常需要保存的,就好像游戏攻略中,存档一样重要,存档就是一种持久化,保证关机以后这个东西好好的保存了。

  所以对于数据库的链接,是必须要配置个数据源的,这里的数据源,狭义上指的是对数据库的链接配置。

  毕竟是存永久性数据的,不可能随意被他人更改,因此衍生出了很多属性,基本上必须包括:

    必须有一个唯一导航地图(url);

    必须有唯一交通工具(dirver);

    必须有唯一身份证(username);

    必须有唯一验证口令(password);

  所以,本质上数据源是在配置通往数据库的路,给固定的交通工具,按照既定路线,到达地点刷卡,对口令。

  这就是数据源存在的必要性了。

2.数据源配置信息都由什么构成?

  数据源的配置信息,本质上只有上述的四个内容来构成,当然由于环境或应用场景的不同,数据源还有众多的衍生配置:

  最大链接数量,最小链接数量,请求超时时间,连接最长保持时间,缓存大小等。

  这些衍生配置并不是必须的配置,但是也是必要的配置,需要给予一定的默认值,来保证能满足于这个运行环境。

    最小链接数量(停车场中保存的巴士数量);

    最大链接数量(行进路线中最多可以并排多少个车通过同一个检查站);

    请求超时时间(检查站没人等多久);

    链接最长保持时间(卸货允许的最大时间);

    缓存大小(车厢容积);

    此外还有其他的一些配置。

3.数据库配置方式的本质是什么?

  目前来说,DataSource是众多数据源配置方式的标准模式,很多框架都使用统一的标准来配置数据源。

  DataSource允许手动配置的内容大概如下图:

  

  这里不用细究,实际上,只要创建了DriverManagerDataSource对象,只要将内容设置进去就可以了。

  然而获取这个参数的方式是比较多的,如:

    ①从properties获取;②从XML获取;③从Java文件中获取;④从Catche中获取;⑤从Bean中获取等等

  获取源头众多不说,获取方式也众多,如:

    ①用注解自动装配Bean;②用XML解析;③用IO获取等等;

  之所以本文用抽象来说,因为不论何种获取方式,多数在面对一个架构或者框架的时候,

  很多人都是从网上直接搜代码的,一个一个尝试,经常会忽略以下几个问题:

    ①该数据源的配置方式对应的框架版本

    ②该数据源的配置方式是否适合你的实际应用场景

    ③该配置方式提供者是否提供给了正确或足够的解释说明

  综上,个人认为,了解一个数据源的构成,了解应用场景,了解数据源获取的本质是十分重要的。

  本质上,数据源配置到跑通测试,主要分为以下五个步骤:

    定义数据源字符串(可以是xml,properties,txt,java,db,catche等多种方式不限定的)

    获取该数据源字符串(可以使用对应框架的方法和工具,可以使用原生的方法,可以自己封装)

    设置数据源并封装成DataSource对象(

      org.springframework.jdbc.datasource.DriverManagerDataSource

      和  javax.sql.DataSource

      本质上是同一个类型,前者可设置数据源,后者作为封装返回对象。

    )

    将该数据源封装对象作为参数传递给某种SessionFactory的创建方法作为参数,以此创建SessionFacotry

    用创建的SessionFacotry去创建session,至于这个创建session时单例还是多例,自己去把控了就。

  至于怎样去写这几个类,是否封装成一个类,是否使用单例,是否使用工厂模式,是否使用订阅模式等;

  应该就是仁者见仁的了,自己去写一段时间,踏几次坑比啥都强。

4.数据源为什么会有多种配置方式?

  数据源的配置方式多样性,看起来是每个框架在重复造轮子,还有很多框架会提供多种配置方式。

  表面上看是这样,实际上不然。原因如下:

  ①如果数据源是唯一的,那么应该写死在代码中,因为很少有人写死在代码中,所以数据源不唯一是常用场景!

  ②数据本身是做持久化使用的,因此保证数据的持久化正确,保证持久化的数据不丢失,是基本需求!

  ③数据源本身路径是不固定的,可能是变化的,可能在已经运行的实际环境中会有备份,切换,维护等!

  ④数据源可能由于服务器故障需要切换到备用服务器,或者因为服务器压力要做负载均衡,数据源会变化!

  ⑤分布式应用中,为了更新,防止单点故障等,数据源切换也要方便,即使是在正式运行环境中!

  ⑥大型分布式或集群中,数据源是依靠‘心跳’来检测可用性与压力的,所以数据源是随动的,量大也不可能人工管理。

  因此,数据源不写死在代码中,而是使用外部文件来写明,保证该文件可修改。

  因此,数据源如果是从‘中央数据库’、‘缓存注册中心’来获取,也是一种实际需求了。

  还因此,数据源的配置文件,在部署以后,知道实际部署地址,有权限的人可以直接手动更改文件内容,也可以自行提供

  更改接口或者API来做。这也是实际部署后,该文件随class文件一同被web-inf文件保护起来的原因。

  因此,了解数据源的获取方式,配置方式,切换方式(error发现机制,aop切换等),才能够搭建出健壮性和扩展性

  更强的系统架构。

以上!✧(∗≧ꇴ≦)人(≧ꈊ≦∗)✧

DB数据源配置之抽象(〇)的更多相关文章

  1. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  2. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  3. DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量

    DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...

  4. spring多个数据源配置

    sys.properties中的内容 jdbc.driverClassName=oracle.jdbc.driver.OracleDriver DB.url=jdbc\:oracle\:thin\:@ ...

  5. 【JAVA】Spring 数据源配置整理

            在Spring中,不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试. 配置数据源 ...

  6. 四、Solr数据源配置(JNDI、DIH)及定时重做索引

    简介 Solr支持很多种创建索引的方式,包括网页,xml以及数据库,因为我这边做的是企业级的搜索,所以用的是数据库建立索引.其实从数据库建立索引,很大程度上取决于原来的数据库设计. 从数据库建立索引, ...

  7. Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)

    转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ...

  8. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  9. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

随机推荐

  1. Java网络编程二

    向web站点发送get post请求,并从web站点取得响应 通相应的set方法,在调用connect()方法前,可以设置请求的各种参数,实现同浏览器类似的访问,调用connect()后可以调用相应的 ...

  2. C#基础知识-数组_ArrayList_List(九)

    之前两篇文档讲述了C#中的面向对象的概念,其实这个概念对于很多种语言都是通用的,只不过每种语言具体实现的过程方法不一样,比如Java.C++.python等,这些都是很流行的面向对象的语言在编程语言排 ...

  3. 动作方法中 参数,Json

    一.方法中可以出现的参数类 1.HttpServletRequest 2.HttpServletResponse 3.HttpSession 4.Model 二.返回接收json数据 1. 接收,返回 ...

  4. Cocos2d-x手游技术分享(1)-【天天打蚊子】数据存储与音效篇

    前言: 手游项目<天天打蚊子>终于上线,特地写几篇技术分享文章,分享一下其中使用到的技术,其中使用cocos2d-x引擎,首选平台iOS,也请有iPhone或者iPad的朋友帮忙下载好评. ...

  5. 【数据库】5.0 MySQL入门学习(五)——MySQL源码了解及MySQL初始化设置

    1.0 MySQL源码目录主要包括:客户端代码.服务端代码.测试工具.其他库文件.当然,看懂源代码得有一定的C语言基础. BUILD:各种平台的编译脚本,可以用来制作各平台的二进制版本 client: ...

  6. wxPython控件学习之wx.grid.Grid 表格控件

    wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...

  7. 配置karma支持Chrome浏览器

    准备:项目中已搭建好了karma. 前言:利用vue-cli初始化创建vue项目时,已经搭建好了测试框架 karma+mocha,但是此时karma默认启动的浏览器是 phantomjs,而我想用 C ...

  8. Struts2的学习-通配符和session对象

    一. 取得session 3种方法1.context.getSession() -->>Map对象 2.HttpServletRequest request =(HttpServletRe ...

  9. May 29th 2017 Week 22nd Monday

    I figure life is a gift and I don't intend on wasting it. 我觉得生命是一份礼物,我不想浪费它. It seems that I didn't ...

  10. 初识Scrum

    团队作业起步 一.团队 队名:想吃蛋炒饭 成员: 许俊杰 肖豪雄 王重和 罗艺璇 曾舒妮 也许是我们队长的人的博客:许俊杰的博客 二.Scrum学习心得 Scrum是迭代式增量软件开发过程,通常用于敏 ...