问:为什么一个应用需要多个数据源
答:有些情况下就是有多个数据源的
问:如果有这样的系统耦合太大了
答:比如一个查询应用,可能从不同数据库服务器的数据库中查询数据,这样就会在
poolman.xml中配置多个数据源,不能说使用了多个数据源,系统的耦合度就增加了,两者不是一回事。
问:如果这样设计就很糟糕
答:并不是所有的应用都需要多个数据源,但是有些应用确实有这种情况,实际要求是这样的不能说这种设计就是糟糕的设计。
问:查询系统应该只有select 表的权限,很明显这样应该建一个cdc数据库用户 其他用户表的权限只授予select 给cdc 用户,不应该将给dbname 权限 这样的安全有问题
答:查询系统的账号有可能有查询权限,也有可能有其他权限,这个东西视情况而定,比如在数据交换系统中,通常不会使用生产系统的数据库用户来做数据交换,通常会另外创建只有查询权限的用户,但是没有绝对的情况。
问:如果dbname 连表的owner用户 表的什么权限都有了
答:当然我只是那查询做个例子来说明多个数据源的情况
问:一般应用连dbname 不应该 是表的owner,一般的公司都dbname 都连表的owner 实际上安全有很大问题;一个dbname 难道不就是一个用户吗
;虽然 不是oracle 用户,但是dbname 和oracle 一般也是一一对应的
答:dbname只是bboss持久层框架中的逻辑数据源的名字,不是oracle的用户名称,也就是poolman.xml中配置的<dbname>节点的值,两者完全是两个不同的概念。
是否使用多个数据源,是系统数据库规划问题,规划能使用几个数据库源就能使用,不能就不使用,bboss持久层提供了两套api分别对应于这两种情况。
一个dbname的定义如下,oracle定义:
这个是mysql的数据源定义:
这个是derby数据源
问:有这样情况?
答:呵呵,数据源(也就是我们通常意义上的连接池)通常都有一个dbname这个是bboss持久层框架的要求,有的数据源会对应数据库用户,有的数据源不对应数据库用户,比如derby
而且一个应用可能会操作多种数据库,比如mysql,oracle,db2,sqlserver,还有derby,等等,呵呵
问:一个应用可能同时会操作多种数据库
这耦合太大了
答:呵呵,那么,bboss持久层api的就提供了两组接口,一组是带dbname的,一组是不带的,如果一个系统中只有一个数据源,那么poolman.xml中就只配置一个数据源,反之就可以配置多个,使用不带dbname的api时,默认对应poolman.xml中的第一个数据源,使用带dbname的api时,那么就在对应的数据源上执行数据库操作。
在业务系统中可能操作多个数据源的情况是普遍存在的,这个和松耦合高内聚的软件设计思想没有必然联系的,也就是说这个和松耦合高内聚的软件设计思想没有冲突的
另外一种情况,我们在一个系统中有几个大模块,为了能够方便的解耦拆分和缓解一个数据库的大压力,我们反而会引入每个模块一个数据源,每个数据源对应一个独立的数据库服务器,当然前提是每个独立的模块之间的数据库是没有关联的,呵呵
当然,如果系统规模比较大,我们会将这些系统拆分成独立的应用部署,每个应用还是可以只配自己的对应的dbname的数据源即可,这样非常方便拆分和合并应用模块的,呵呵
问:别把系统搞成巨无霸系统了
答:那确实,不过一般情况下用不用多数据源和系统规模没有太多关系的。用多个数据源的系统不一定是大系统哦,很多小系统也有多个数据源的哦。
另外再大系统中使用多数据源,可以为访问量较大的模块分配一个独立的数据源,为访问量较小的模块分配其他的数据源,也能够使系统的性能更好。
bboss的持久层框架api尽可能地满足各种需要,至于系统怎么去使用,可以有架构师去决定,呵呵
bboss持久层相关配置文章:
持久层动态创建、启动、停止和使用多个数据源的方法
bbossgroups实现多数据库事务
bboss persistent通过jndi引用外部数据源(datasource)方法
bbossgroups持久层框架ConfigSQLExecutor组件api实例
bbossgroups 3.1SQLExecutor组件api使用实例
bbossgroups持久层框架数据源配置文件实例
- 大小: 37 KB
- 大小: 27.2 KB
- 大小: 47.5 KB
分享到:
相关推荐
用数据源连接池配置/用数据源连接池配置/用数据源连接池配置/用数据源连接池配置/
数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现...
weblogic数据源连接池的创建步骤,很快很好很方便
springboot+mybatis多数据源+动态数据源配置(连接池),mysql数据库,代码实现了简单的读写分离,但是不建议这种操作,建议使用数据库中间件进行读写分离,例如使用mycat进行读写分离主从热备,使用该代码对于多个...
springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip
在实际项目的开发中,特别是web应用程序中,如Jsp,Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据方请求必须建立连接,存取数据,关闭连接等步骤,而数据库连接是一种非常昂贵的资源,频繁的建立连接,...
在GlassFish中配置数据源连接池
在tomcat中配置数据源连接池的配置方法,及jar包文件。
连接池数据源配置:其中包括类;属性以及说明文件;很详细;让你轻松摆脱开发工具来发布工程
通过SpringAop实现多数据源的动态切换 并采用Druid连接池,可扩展继续增加数据库配置。
NULL 博文链接:https://kingxss.iteye.com/blog/1479451
一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一...
在WebLogic中建立数据库连接池与数据源及利用JBuilder进行测试
演示用c3p0组件做连接池 演示用JNDI(jtds组件)做连接池
. 连接池基本的思想,原理 数据库连接池技术的优点: c3p0的使用
Java动态代理实现数据源连接池,用代理类实现的连接池代码,绝对完整的案例,下载源码就能跑起来!Java动态代理实现数据源连接池,用代理类实现的连接池代码
jdbc使用c3p0连接池连接数据库,支持配置多个数据源,有相关的查询测试。
Hibernate的三种连接池设置C3P0、Proxool和DBCP. 详细说明及配置方法 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.
为什么使用连接池 数据源和连接池的概念 配置Tomcat
java 数据源连接池比较,主要对比c3po与proxy数据源配置说明