一、数据源概念说明

企业级应用一般要使用数据库,而使用数据库,现在直接使用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。

原文链接:http://doc.primeton.com/pages/viewpage.action?pageId=32739222

详细咨询请联系普元售后:cservice@primeton.com

普元AppServer 使用多数据源相关推荐

  1. 普元 AppServer 7.0 服务器的日志在哪查看?

    [问题] 普元 AppServer 7.0 服务器的日志在哪查看? [解答] 日志记录在domains/domain1/logs/server.log中,查看方式如: tail –f pas7/pas ...

  2. 普元 AppServer 6.5 可以部署EOS导出的部署包吗?

    [问题] 普元 AppServer 6.5 可以部署EOS导出的部署包吗? [解答] 可以部署,详情请参考:http://doc.primeton.com/pages/viewpage.action? ...

  3. 普元 AppServer 6.5 支持哪些日志级别?

    [问题] 普元 AppServer 6.5 支持哪些日志级别? [解答] 支持如下级别: OFF:是一个可用于关闭日志记录的特殊级别. FINEST:指示一条最详细的跟踪消息. FINER:指示一条相 ...

  4. 普元 AppServer 6.5 业务应用连接mysql数据库报错:java.security.UnrecoverableKeyException: Password verification fai

    问题] AppServer 6.5 业务应用连接mysql数据库报错: [解答] 问题原因:mysql高版本需要指明是否进行SSL连接,当前配置的mysql连接字符串url中没有指定是否进行SSL连接 ...

  5. 普元 AppServer 6.5 哑安装后执行启动命令./startup.sh后启动失败

    [问题] AppServer 6.5 哑安装后执行启动命令后启动失败,见下图: [解答] 原因:执行启动命令时,直接在安装包:Primeton_AppServer_6.5_Enterprise_Edi ...

  6. 普元 AppServer 7.0 执行startServer.cmd启动,命令行一直启动中,server.log报错:com.primeton.appserver.l7e.exception.Impr

    [问题] AppServer 7.0 JDK1.8.0_251   执行startServer.cmd启动,命令行一直启动中,server.log报错: [2020-06-11T10:21:33.53 ...

  7. 普元 AppServer 6.5 部署业务应用war报错:java.lang.RuntimeException: java.lang.ClassNotFoundException: org.hiber

    [问题] AppServer 6.5 部署业务应用war报错: Exception while invoking class org.glassfish.ejb.startup.EjbApplicat ...

  8. 普元 AppServer 部署应用时报错:Exception while loading the app : CDI deployment failure

    [问题] 部署应用时报错,报错日志如下: Exception while loading the app : CDI deployment failure:WELD-001409:Ambiguous ...

  9. 普元 AppServer 6.5 将springboot应用部署到应用服务器,上传文件时报错:Caused by: org.springframework.web.multipart.Multipar

    [问题] springboot应用部署到应用服务器后,上传文件时报错: Caused by: org.springframework.web.multipart.MultipartException: ...

最新文章

  1. python利用wx.grid网格显示数据
  2. 《C与指针》第四章练习
  3. 【CF913F】Strongly Connected Tournament 概率神题
  4. Listener(监听器)
  5. 栈溢出笔记1.7 地址问题(2)
  6. SQL与C#结合完整修改 删除信息
  7. wdos相关问题解答
  8. webpack和 php配合,javascript - webpack和laravel-elixir-webpack的正确配合方式?
  9. 对编程语言的数据类型的理解
  10. 嵩天python测验_北理 嵩天老师 Python程序设计 测验易错题总结
  11. java数字转换成大写字母
  12. 苹果iOS捷径(快捷指令)修改网页元素:移动端开发者工具console的替代方案
  13. linux软路由关闭超线程,废掉硬路由,组建软路由的详细教程(图)
  14. 使用NoteExpress/Citespace/VOSviewer/EndNote进行CNKI文献计量分析
  15. 绝佳的充电时间:自我隔离时何不探索这些数据科学技术
  16. Tinker 合并及加载补丁过程源码分析 (三)
  17. 正则啊啊 啊啊啊啊啊啊 啊
  18. 听歌的时候再也不用各个音乐播放软件来回切换啦!
  19. 使用Wireshark工具分析网络协议
  20. c语言git代码注释风格,git代码格式化上传

热门文章

  1. 【论文阅读】深度学习去雾1——论文精选
  2. SecoClient在win10系统中连接失败解决方案
  3. viewsets.ModelViewSet
  4. gogs搭建git服务教程
  5. qboimathtest1 t2 配对
  6. oracle开放查询表权限_Oracle创建用户并给用户授权查询指定表或视图的权限
  7. C语言实现输入三次密码进行登录
  8. 温故而知新(一)Halcon 画线,虚线,圆,矩形
  9. JS_鼠标移入移出触发事件
  10. MessageBox in wpf