一、数据源概念说明

企业级应用一般要使用数据库,而使用数据库,现在直接使用JDBC来获取数据库连接已经很少了,因为获取连接消耗的性能比较高。一般做法都是提供带有连接池功能的数据源,数据源中保存一部分数据库的长连接,用户需要访问数据库的时候,从数据源中获取一个数据库连接操作就可以了。使用完后"关闭"数据库连接,连接返回到连接池中(这里的关闭并没有真正关闭掉数据库的底层连接,而是将占用的数据库连接释放掉,返回到连接池中共其他程序使用)。

普元产品中所说的数据源有三个层次的数据源:

1、应用服务器数据源

应用服务器数据源就是应用服务器层面提供的数据源。配置这些数据源,一般可以通过应用服务器的管理控制台进行配置,或直接修改数据源配置文件(如JBoss、Tomcat等)。

2、应用数据源

这种数据源是在普元产品开发的应用中配置的数据源,这个数据源是通过Governor进行配置的,数据源的配置对应的文件是user-config.xml文件里面的datasource部分。

应用数据源分为两类,见下表:

数据源类型

适合应用服务器

数据源的本质

C3P0数据源

Tomcat

自己管理数据库连接池,不需要应用服务器的数据源。

JNDI数据源

JBoss、WebLogic、WebSphere、PAS

只是一个对应用服务器数据源的应用,数据源名称对应

一个应用服务器数据源的JNDI名称。

应用数据源的名称默认为default,下面是两个数据源的配置例子:

1)C3P0数据源配置:

<module>

< group>

< configValue key="C3p0-DriverClass">com.ibm.db2.jcc.DB2Driver</configValue>

< configValue key="C3p0-Url">jdbc:db2://192.168.1.251:50000/eos</configValue>

< configValue key="C3p0-UserName">eos6si</configValue>

< configValue key="C3p0-Password">eos6si</configValue>

< configValue key="C3p0-PoolSize">10</configValue>

< configValue key="C3p0-MaxPoolSize">50</configValue>

< configValue key="C3p0-MinPoolSize">10</configValue>

< configValue key="Transaction-Isolation">ISOLATION_READ_COMMITTED</configValue>

< configValue key="Database-Type">DB2</configValue>

< configValue key="Jdbc-Type">IBM DB2 Driver(Type4)</configValue>

< configValue key="Test-Connect-Sql">SELECT 1 </configValue>

< configValue key="Retry-Connect-Count">-1</configValue>

< /group>

< /module>

2)JNDI数据源的配置:

<module>

< group>

< configValue key="Jndi-Name">EOSDefaultDataSource</configValue>

< configValue key="Transaction-Isolation">ISOLATION_READ_COMMITTED</configValue>

< configValue key="Test-Connect-Sql">SELECT count(*) from EOS_SERVICE_ENDPOINT</configValue>

< configValue key="Retry-Connect-Count">-1</configValue>

< /group>

< /module>


3、构件包数据源

构件包中定义的数据源。使用普元产品开发数据库应用,一般多用逻辑流,使用基础构件库中的数据库基础构件来访问数据库,里面填写的第一个参数就是构件包数据源的名称,如下图所示:


构件包数据源是一个对应用数据源的引用,一般默认配置一个数据源,默认名称为"default",对应默认的应用数据源"default"。构件包通常配置一个数据源,如果使用多个数据源,可以配置两个应用数据源,再配置两个构件包数据源。构件包数据源在构件包META-INF/contribution.eosinf中配置,下面是配置了两个数据源的例子:

<contribution xmlns="http://www.primeton.com/xmlns/eos/1.0">

... ...

< module name="DataSource">

< group name="Reference">

< configValue key="ds1">appDS1</configValue>

< /group>

< group name="Reference">

< configValue key="ds2">appDS2</configValue>

< /group>

< /module>

< /contribution>

其中,ds1和ds2是构件包数据源的名称,appDS1、appDS2是应用数据源的名称(这个例子没有使用默认的default名称)。

应用服务器数据源、应用数据源和构件包数据的关系如下图所示:


 
二、多数据源的配置

在大多数应用开发的情况下,一般使用的是单数据源,在安装介质安装开发版或运行版时,都是选择一个单一数据源的。但随着用户业务的复杂程度的提高,可能需要连接多个数据库的时候,需要配置多个数据源。

配置和使用多数据源,主要有以下几个步骤:

1、配置多个应用服务器数据源,通过应用服务器控制台配置,或修改数据源配置文件。

2、配置多个应用数据源,配置多个数据源(C3P0或JNDI),可以通过Governor进行配置,不同的数据源名字起为不同的。可以参考《我要配置数据源或更改数据库》。应用数据源配置在user-config.xml中。

3、配置构件包数据源,在构件包配置文件中,增加多个构件包数据源选项,每个选项对应一个应用数据源的名称。程序使用数据源是通过数据库访问构件通过构件包数据源访问数据库的,因此要配置构件包数据源。

修改构件包的数据源,要在Studio的EOS项目中,修改配置的contribution.eosinf文件的数据源部分,如下所示:

<module>

< group>

< configValue key="default">default</configValue>

< /group>

< group>

< configValue key="ds2">secondDS</configValue>

< /group>

< /module>


上面显示了构件包使用了两个数据源,一个名字是default的默认构件包数据源,关联名字为default的应用数据源,另一个是名称为ds2构件包数据源,关联了名字为secondDS的应用数据源。

三、使用多数据源

1、通过基础构件库使用多数据源。

程序在使用数据源的时候,一般调用平台提供的数据库访问构件库来访问数据库,如下图所示的逻辑流,第一个参数就是构件包数据源的名称,使用ds2构件包数据源,从而能够使用第二个数据源。使用更多的数据源的原理相同。


 

 
使用这种数据源配置的好处是,程序可以预先定好使用几个数据源,并写死程序,但只写一个关联的名称,上线的时候,通过更改应用数据源来更改相应的数据库连接,而不需要再修改程序-,达到灵活配置数据源的目的。

建议一个事务中只操作同一个数据源,不建议一个事务中操作不同的数据源。

如果要想在一个事务中使用不同的数据源,就要更换数据库的驱动类,使用支持JTA的XA数据库驱动程序,XA的驱动目前存在问题较多,不是很稳定,因此尽量不用。

2、使用SpringBean构件来使用多数据源。

除了逻辑流使用多数据源外,用SpringBean也可以使用多个数据源。要通过SpringBean使用多数据源,需要首先更改应用级的Spring配置文件,增加数据源的Bean。

1)配置数据源和事务管理器Bean

修改EOS项目中的"系统配置-config-user"节点下的spring.xml配置文件,修改数据源的配置,如下:

<bean id="DefaultDataSource" class="com.eos.spring.DASDataSource">

< property name="dataSourceName">

< value>default</value>

< /property>

< /bean>

< bean id="dataSource2" class="com.eos.spring.DASDataSource">

< property name="dataSourceName">

< value>secondAppDS</value>

< /property>

< /bean>

这里面配置了两个数据源的Bean,名字分别为DefaultDataSource和datasource2,对应的应用数据源的名称分别为default和secondAppDS。

再为数据源配置一个事务管理器,如下;

<bean id="DefaultTransactionManager" class="com.primeton.spring.DASTransactionManager">

< property name="dataSource">

< ref bean="DefaultDataSource"/>

< /property>

< /bean>

< bean id="TransactionManager2" class="com.primeton.spring.DASTransactionManager">

< property name="dataSource">

< ref bean="dataSource2"/>

< /property>

< /bean>

这里配置了两个事务管理器,DefaultTransactionMananger和TransactionManager2,用的是同一种事务管理器实现,对应的数据源bean分别是DefaultDataSource和datasource2。

2) 增加使用数据库的SpringBean(DAO)

在构件包中新建SpringBean,扩展com.eos.spring.DASDaoSupport类。修改构件包的配置文件"配置--spring"的beans.xml文件,如下:

<bean>

< property ref=" DefaultDataSource"/>

< /bean>

< bean>

< property ref=" datasource2"/>

< /bean>

上面是配置了两个SpringBean,分别使用了不同的数据源。

SpringBean的开发具体可以参考联机帮助文档中的《EOS帮助文档-入门学习入门指南-SpringBean开发》部分的文档说明。

3、ConnectionHelper底层API

可以直接使用普元产品提供的底仓API来获取数据库连接,普元提供了下面的接口来获取数据库连接:

com.eos.common.connection. ConnectionHelper类的两个接口:

1)根据应用数据源名称获取数据库连接:public static Connection getConnection(String dataSourceName)。

2)根据构件包名称和构件包数据源名称来获取数据库连接:public static Connection getContributionConnection(String contributionName,String dataSourceAlias)。

注:第一个参数是构件包名称,第二个参数为构件包数据源名称。

使用底层获取数据库连接,要手工写编程式事务,如事务开始, 事务提交和事务回滚,用完后要手工关闭数据库。否则数据库操作会出现问题,如不能保证数据操作的一致性,或数据库连接不释放等bug。

普元EOS之我要使用多数据源相关推荐

  1. 普元EOS开发积累第一篇(常见错误解决方法) 持续更新

    普元EOS开发积累第一篇(常见错误解决方法) 持续更新 参考文章: (1)普元EOS开发积累第一篇(常见错误解决方法) 持续更新 (2)https://www.cnblogs.com/tangjing ...

  2. 普元 EOS Platform 7.6 集群部署在BES9.5.2.4692,重启集群节点偶发报错:java.util.ConcurrentModificationException

    [问题描述] 普元EOS Platform 7.6 集群部署在BES9.5.2.4692,重启集群节点偶发报错: [com.primeton.runtime.resource.impl.Contrib ...

  3. 普元eos开发手册_名词解释--统一应用(开发)平台Unified Application Platform

    国内有些企业项目开发当中,可能会遇到UAP的概念,UAP指的是Unified Application Platform,即统一应用平台. UAP,简单的理解,就是公司层面,统一的技术平台,涉及整个公司 ...

  4. 普元EOS/BPS为什么没有安装成功 ?

    原文连接 在实际的Platform/BPS的产品安装使用中,经常会遇到安装不成功的场景,运行版不成功多于开发版,运行版中集群安装不成功又多于单机版.手工部署安装问题也会多于安装介质的安装.下面说明一下 ...

  5. 普元EOS RichWeb(富客户端)实践总结

    最近公司未来一银行项目要使用到普元的EOS,客服是普元合作机构,没办法,必须将系统在EOS平台上部署开发,认真学习了2个星期,对EOS6.0的印象还是非常的好.丰富的页面开发组件,SOA我不是特别特别 ...

  6. 普元eos使用svn_普元DevOps介绍

    普元DevOps是通过工具链与集成.发布.反馈与优化进行端到端整合,完成无缝的跨团队.跨系统协作.其目标是建立开发与运维之间的桥梁,履行开发运维协作.自动化.基础设施即代码.持续集成.持续测试.持续发 ...

  7. 普元 EOS Platform 7.6适配人大金仓v8

    先说下普元7.6,普元7.6最大支持编译JDK1.7.然后在它默认的数据源里,最大支持人大金仓V7. 实际使用中,可以使用JDK1.8,也可以连接人大金仓V8. 人大金仓V8记得朝人大金仓要jar包( ...

  8. 普元 EOS定时任务实现原理

    转至元数据起始 普元平台的定时任务能力是通过开源的作业调度框架Quartz实现的. 一.定时任务的基本概念: 调度器:负责管理Quartz应用运行时环境,用于调度定时任务. 定时任务:按照某种时间规则 ...

  9. 普元EOS之我要配置数据源或更换数据库

    阅读原文 用户在使用普元产品的时候,有时候会根据业务需要,要配置数据源或更换数据库连接,分为开发版的更换和运行环境的更换. 1. 数据源概述 普元SOA产品中提到的数据源,分为两种, C3P0数据源和 ...

  10. 普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...

    1  创建项目 1)  进入EOS Studio开发透视图: 单击主菜单项"文件"选择"新建"->"空EOS项目 2)  在弹出的"创 ...

最新文章

  1. Cheat_Sheet ---Keras、Matlab、Matplotlib、Numpy、Pandas、Scikit-Learn、SciPy
  2. P5081 Tweetuzki爱取球(期望)(线性求逆元)
  3. 2020年周数和日期对应表_2020年雅思考试报名截止日期、准考证打印日期和成绩单寄送日期...
  4. 服务器搭建-Linux基础知识
  5. git 子命令 git tag 常用命令实操教程
  6. 24 种设计模式之 观察者模式
  7. angularJS1.6.3个人理解(后续更新4.4.7)
  8. 互联网欺诈,金钱利益下的汩汩恶意
  9. Java基础(四)——异常、断言、日志
  10. 从 Web1.0 到 3.0 你不知道的互联网的演进史!
  11. 实体属性变更历史记录框架(一)-变更历史记录从此无忧
  12. leetcode最大矩形_柱状图中的最大矩形
  13. CCF201512-5 矩阵【矩阵快速幂】(募集解题代码)
  14. python不会英语不会数学怎么自学-学习Python数学英语基础重要吗?
  15. javascript使用栈结构将中缀表达式转换为后缀表达式并计算值
  16. 编码的奥秘:两种典型的微处理器
  17. 千图成像,手把手教你制作人像拼图效果
  18. java 车牌号归属地_本地化JavaAnpr用于本地的车牌
  19. Lesson 57 An unusual day 很不平常的一天
  20. 无效的列类型所执行的sql语句

热门文章

  1. UML基础(八)--构件图
  2. CRACK秘籍之爆破
  3. Server JRE 简介
  4. 安装Win7或者XP系统用虚拟光驱加载Win7或者XP镜像 iso文件xp win7wim文件
  5. 在线英英词典完整代码
  6. 园林景观cad_9套CAD平面设计素材图,上千个绘图模板随意用,全部打包带走
  7. 【渗透测试】利用永恒之蓝漏洞实现桌面监控
  8. 2020计算机组成原理课程设计(桂电)
  9. MicroPython RP2040点灯实验
  10. 软件测试学习视频 分享