欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
项目需求,需要在监听待办事件将相关数据推送到其他数据源中,考虑使用EOS自身的DatabaseUtil工具类实现。实现时遇到了如下问题:
EOS的数据源是针对构建包概念的,而BPS环境中作为监听事件不属于构建包中运行,因而DatabaseUtil代码无法直接获取到运行环境的构建包的数据源,导致
数据始终都插入到了default数据源中
当需要在BPS中使用com.eos.foundation.database.DatabaseUtil工具类调用非default数据源时,进行预处理:
public static void com.primeton.xx.listener.DataSourceHelper.prepare("governor中新的数据源名称");
如果是对非default数据源的操作则每次在使用 DatabaseUtil都需要先调用上述预处理的方法。
附:com.primeton.xx.listener.DataSourceHelper方法实现:
import com.eos.data.datacontext.DataContextManager;
import com.eos.runtime.resource.ContributionMetaData;
import com.eos.system.annotation.Bizlet;
import com.primeton.common.connection.impl.datasource.DataSourceReference;
/**
* 数据源帮助类《特殊情况下使用,详情见各个方法的说明》
*
* @author Chenmin
*
*/
@Bizlet("数据源")
public class DataSourceHelper {
/**
* 对即将调用的<b>非default</b>数据源预处理<br />
* <b>说明如下:</b>
* <pre>
* 当需要在BPS中使用com.eos.foundation.database.DatabaseUtil工具类
* 来处理数据更新时
* 如果是对非default数据源的操作则需要预先调用的方法
* </pre>
* @param dsName 需要使用的数据源名称
*/
@Bizlet("准备数据源")
public static void prepare(String dsName) {
String contributionName = "bps";
String datasourceAlias = dsName;
String datasourceRealName = dsName;
DataSourceReference.putDataSourceReference(contributionName,
datasourceAlias, datasourceRealName);
ContributionMetaData cmd = new ContributionMetaData();
cmd.setName(contributionName);
DataContextManager.current().pushContributionMetaData(cmd);
}
}
说明:项目中使用的com.primeton.common.connection.impl.datasource.DataSourceReference是内部接口,不建议使用