ETL开发和配置说明V100b.docx
- 文档编号:5220986
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:17
- 大小:21.62KB
ETL开发和配置说明V100b.docx
《ETL开发和配置说明V100b.docx》由会员分享,可在线阅读,更多相关《ETL开发和配置说明V100b.docx(17页珍藏版)》请在冰豆网上搜索。
ETL开发和配置说明V100b
ETL开发和配置说明
V1.0.0
(Updated1)
1说明
ETL的运行在公司的ETLSevice服务中,集成了实时接口、日志管理、线程调度和数据库连接池这四个产品,需要与公司的系统管理AdminWeb配合使用;
ETL支持两种数据模式:
1.采用任务的方式,定时处理数据
2.实时处理数据
2AdminWeb的ETL相关简单介绍
在AdminWeb中的同步配置管理菜单中
2.1同步配置线程
2.2日志管理
3数据库连接池介绍
ETL原则上支持多种数据库的连接,采用数据库参数配置的方式实现,配置文档放在\WEB-INF\pool\的目录下一个配置文件,该配置的文件名在Web.xml的约定:
注:
1.pool的配置文件只能有一个:
/WEB-INF/pool/pool.xml,就是数据库连接池的配制文档;
2.trans的配置文件可以多个,文件之间用”;”分开,例如:
/WEB-INF/trans/trans1.xml;/WEB-INF/trans/trans2.xml
3.1数据库连接池的配置介绍
配置文件中,包含两个部分:
3.1.1数据库驱动的参数
….
name:
驱动名称,不能重复
class:
驱动类
3.1.2连接池参数
maxpool="10" maxconn="20" expiry="18000" url="jdbc: oracle: thin: @172.21.179.143: 1521: spmdb" user="system" password="spmdb" driver="oracle"/> …. name: 连接池的名称,是开发BaseDAO.getConnection(StringpoolName)调用中参数poolName,不能重复 maxpool: 连接池的数据同时获得连接的最大数量 expiry: 每个连接的空置运行时间,超出这个时间,连接池将回收 url: 数据库的URL user: 访问数据的用户 password: 访问密码 driver: 数据库的驱动定义,就是Driver的名称 3.2数据库连接池的配置实例 xmlversion="1.0"encoding="GB2312"standalone="yes"? > --系统需要接口调用的类--> --drivername="db2"class="Com.ibm.db2.jcc.DB2Driver"/--> -- ORACLE的数据库联接 maxpool="10" maxconn="20" expiry="18000" url="jdbc: oracle: thin: @172.21.179.143: 1521: spmdb" user="system" password="spmdb" driver="oracle"/> --> maxpool="10" maxconn="20" expiry="18000" url="jdbc: oracle: thin: @localhost: 1521: spmdb" user="system" password="spmdb" driver="oracle"/> -- DB2的连接有四种,其中两种: 1.DB2Type2的连接(本地连接db2java.zip) Driver: COM.ibm.db2.jdbc.app.DB2Driver URL: jdbc: db2: SAMPLE 2.DB2Type4的连接(远程连接db2jcc.jar) Driver: com.ibm.db2.jcc.DB2Driver URL: jdbc: db2: //localhost: 50000/SAMPLE maxpool="10" maxconn="20" expiry="18000" url="jdbc: db2: //localhost: 50000/SAMPLE" user="system" password="spmdb"/> --> --poolname="red_db" maxpool="10" maxconn="20" expiry="18000" url="jdbc: db2: //192.168.1.100: 50000/RED_DB" user="db2admin" password="redbull"--> maxpool="10" maxconn="20" expiry="18000" init="1" url="jdbc: db2: RED_DB" user="db2admin" password="db2admin"/> maxpool="10" maxconn="20" expiry="18000" init="1" url="jdbc: db2: RED_DB" user="db2admin" password="db2admin"/> 4ETLService同步数据映射配置 配置文件在ETLService.ear中的ETLWeb 4.1同步数据映射说明 同步映射配置,可以一个业务对象对多个数据表,如下: 4.2数据映射的配置实例 xmlversion="1.0"encoding="GB2312"standalone="yes"? > --系统实时同步的数据映射定义 table: name: 表名 seq: 序列字段名称,例如: EMPLOYEE_ID seqtable: 序列的名称,例如: ECC_FND.ECC_FND_EMPLOYEES_S poolname: 表所在的数据库连接池 field name: 数据字段的名称 transname: 迁移数据的名称 --> 5数据实时同步开发介绍 采用EJB的调用方式,EJB的名称XREtl,在调用的程序中引用XREtl.jar: 5.1远程接口获得 try { //TransfromIntime的接口 TransfromIntimetransfromIntime=(TransfromIntime)EJBHomeFactory.getFactory(com.pcm.etl.ReferenceConst.EJB_NAME).lookupHome(TransfromIntimes.class); } catch(EjbHomeFactoryExceptione) { Debug.printErr(e); thrownewEJBException(e); } 5.2远程接口方法 voidinsertData(Stringxml,intregisterId); xml的格式参见下节 registered: 注册企业,从User对象中获得; 5.3远程接口方法参数说明 5.3.1插入数据的XML XML的格式如下: xmlversion="1.0"encoding="GB2312"standalone="yes"? > --系统实时同步的数据映射定义 trans: 属性: name: 系统实时同步的名称,与ETLWeb中实时配置的trans的名称一致 数据的内容: name: 系统实时同步数据名称,与ETLWeb中实时配置的trans的相同名称中的table中field的transname的值相同,否者就不会保存 --> 一个 5.3.2插入数据的XML的实现方式 可以通过工具类: Model2XMLUtils实现 Model2XMLUtilsutil=Model2XMLUtils.getInstance(); EccFndEmployeesmodel=….//获得员工的数据 StringdataConfig=”employee”;//员工的映射名称,在ETLWeb的trans中配置 try { StringemployeeXML=Util.getTransMappingXML(model,dataConfig); } catch(UtilException) { … } 6数据线程同步开发介绍 在工程中必须引用: XRUtil.jar 6.1开发说明 类必须从BaseSchedulerThread派生实现doInitial和doWake两个方法,doInitial是线程启动时做初始化准备,若是没有准备,可以不用填写实现内容,doWake线程的工作内容,是同步过程的实现方法。 数据库的操作开发 1.获得Connection Connectioncon=BaseDAO.getConnectionByPools(StringpoolName); 2.释放Connection 6.2开发实例 从两个数据不同数据库查询,并将操作日志写入到同步的日志文件中,这个类的路径在AdminWeb中配置使用。 BaseDAO.freeConnectionByPools(Connectioncon,StringpoolName) packagecom.pcm.web.etl.test; importjava.sql.Connection; importjava.sql.SQLException; importjava.sql.Timestamp; importjava.util.Iterator; importcom.pcm.db.ColumnData; importcom.pcm.db.QueryUtil; importcom.pcm.ejb.EJBHomeFactory; importcom.pcm.ejb.EjbHomeFactoryException; importcom.pcm.exception.UtilException; importcom.pcm.fnd.ReferenceConst; importcom.pcm.fnd.constants.ETLConstants; importcom.pcm.fnd.model.ETLSchedulerLogModel; importcom.pcm.fnd.universe.ETLSchedulerLogLet; importcom.pcm.tracer.Debug; importcom.pcm.util.Constants; importcom.pcm.util.data.QueryPageData; importcom.pcm.util.data.QueryResultData; publicclassTestextendscom.pcm.util.BaseSchedulerThread { ETLSchedulerLogLetetlSchedulerLogLet=null; @Override protectedvoiddoInitial() { try { etlSchedulerLogLet=(ETLSchedulerLogLet)EJBHomeFactory.getFactory(ReferenceConst.EJB_NAME).lookupHome(ETLSchedulerLogLet.class); } catch(EjbHomeFactoryExceptione) { Debug.printErr(e); } } protectedvoiddoWakeUp() { if(etlSchedulerLogLet==null) return; // ConnectioneipCon=null; ConnectionwmsCon=null; Stringtime=newTimestamp(System.currentTimeMillis()).toString(); ETLSchedulerLogModelmodel=newETLSchedulerLogModel(); model.setLogType(this.getClass().getName()); model.setLogTime(time); model.setCreationDate(time); model.setRegisterId(super.registerId); model.setEnableFlag(Constants.ENABLE_FLAG_TRUE); try { eipCon=com.pcm.pubs.db.connection.BaseDbDAO.getConnectionByPools("eip_db"); wmsCon=com.pcm.pubs.db.connection.BaseDbDAO.getConnectionByPools("wms_db"); QueryUtilqueryUtil=QueryUtil.getInstance(); QueryResultDataeipRes=queryUtil.query("select*fromecc_fnd.ecc_fnd_enterprise",newQueryPageData(),eipCon); Debug.printErr("================eipCon=============="); listPage(eipRes); QueryResultDatawmsRes=queryUtil.query("select*fromecc_fnd.ecc_fnd_employeeswhereregister_id=400",newQueryPageData(),wmsCon); Debug.printErr("================wmsCon=============="); Debug.printErr("select*fromecc_fnd.ecc_fnd_employeeswhereregister_id=400"); listPage(wmsRes); // model.setLog("getdataformeip_db,andinsertintowms_db,isOK"); model.setLogLevel(ETLConstants.ETL_SUCCESS); etlSchedulerLogLet.insert(model); } catch(SQLExceptione) { Debug.printErr(e); model.setLog(e.getMessage()); model.setLogLevel(ETLConstants.ETL_ERROR); etlSchedulerLogLet.insert(model); } catch(UtilExceptione) { Debug.printErr(e); model.setLog(e.getMessage()); model.setLogLevel(ETLConstants.ETL_ERROR); etlSchedulerLogLet.insert(model); } finally { try { com.pcm.pubs.db.connection.BaseDbDAO.freeConnectionByPools(eipCon,"eip_db"); } catch(SQLExceptione) { Debug.printErr(e); model.setLog(e.getMessage()); model.setLogLevel(ETLConstants.ETL_WARN); etlSchedulerLogLet.insert(model); } try { com.pcm.pubs.db.connection.BaseDbDAO.freeConnectionByPools(wmsCon,"wms_db"); } catch(SQLExceptione) { Debug.printErr(e); model.setLog(e.getMessage()); model.setLogLevel(ETLConstants.ETL_WARN); etlSchedulerLogLet.insert(model); } } } privatevoidlistPage(QueryResultDatares) { // if(res.getColumnNames()! =null) { intnColumn=res.getColumnNames().length; Stringhead=""; for(intiColumn=0;iColumn { head+=res.getColumnNames()[iColumn]+"/"+res.getColumnLabels()[iColumn]+"/"+res.getColumnTypes()[iColumn]+""; } Debug.println(head); // inti=1; for(Iterator { Stringline=""; ColumnDatadata=it.next(); Object[]colmuns=data.getDatas(); // for(intiColumn=0;iColumn { if(colmuns[iColumn]==null) line+="null"; else line+=colmuns[iColumn].toString()+""; } Debug.println(line); } } } } 6.3部署方式 把程序输出jar文件,放在ETL的运行环境的lib下; 以系统管理员进入AdminWeb,配置运行线程,参见《AdminWeb的ETL相关简介》 重新运新ETL工程就可以了; 7附件 7.1数据工具类QueryUtil的介绍 该工具类是通用查询工具类,输入查询SQL,返回查询结果保存在QueryResultData对象中,参见实例 调用方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ETL 开发 配置 说明 V100b
![提示](https://static.bdocx.com/images/bang_tan.gif)