Java EE 7 Batch中传递属性/参数的2种方式

对于Java EE 7批处理工具,有两种将属性/参数传递给块和批处理的方法。 本快速指南向您展示了两种方式,在开发批处理Java EE 7方式时可能会经常使用它们。

1.运行前预定义的属性/参数

预定义属性是您在部署应用程序之前定义的属性(名称/值对)。 换句话说,它是固定的和静态的,从不动态的,并且在您检索它们时值将始终保持不变。 这是通过作业描述符XML文件完成的,该文件位于例如META-INF / batch-jobs / demo-job.xml中 。 例如:

<?xml version="1.0" encoding="UTF-8"?>
<job id="demoJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0"><properties><property name="staticParamName1" value="staticParamValue1" /><property name="staticParamName2" value="staticParamValue2" /></properties><!-- Then, the rest of the steps definition -->
</job>

它要做的就是将每个预定义的属性放在<properties />标记内。 部署应用程序后,这些属性将对运行时XML文件中定义的ItemReader,ItemProcessor,ItemWriter和Batchlet的对象可用。

这是一个有关在运行时如何检索预定义属性/参数的示例。

@Dependent
@Named( "DemoReader" )
public class DemoReader extends AbstractItemReader {@Injectprivate JobContext jobCtx;@Overridepublic void open( Serializable ckpt ) throws Exception {// Retrieve the value of staticParamName1 defined in job descriptor XMLString staticParamValue1 = jobCtx.getProperties().getProperty( "staticParamName1" );// The rest of the implementation}// The rest of the overridden methods
}

不利的一面是,属性值在整个运行期间始终保持不变。 如果需要将动态值传递给批处理步骤对象,请继续阅读...

2.在运行时动态传递属性/参数

在批处理运行期间,有时需要动态属性/参数值。 为此,首先必须定义属性/参数,并将作业操作员传递给批处理作业。

例如,我有一个JobOperator (Singleton EJB),它将通过方法runBatchJob()启动批处理作业,该方法两个动态属性/参数传递给批处理作业对象:

@Singleton
public class BatchJobOperator implements Serializable {public void runBatchJob() {Properties runtimeParameters = new Properties();runtimeParameters.setProperty( "dynamicPropertyName1", "dynamicPropertyValue1" );runtimeParameters.setProperty( "dynamicPropertyName2", "dynamicPropertyValue2" );JobOperator jo = BatchRuntime.getJobOperator();// Run the batch job with the runtimeParameters passedjo.start( "name-of-job-xml-file-without-dot-xml", runtimeParameters );}
}

一旦应用程序服务器运行了作业,该作业中涉及的对象(ItemReader,ItemProcessor,ItemsWriter和Batchlet)就可以检索在runtimeParameters中设置的属性,但是使用另一种方式。 这是在ItemReader中执行操作的方式(其余的批处理作业步骤对象也是如此):

@Dependent
@Named( "DemoReader" )
public class DemoReader extends AbstractItemReader {@Injectprivate JobContext jobCtx;@Overridepublic void open( Serializable ckpt ) throws Exception {// Here's how to retrieve dynamic runtime properties / parametersProperties runtimeParams = BatchRuntime.getJobOperator().getParameters( jobCtx.getExecutionId() );String dynamicPropertyValue1 = runtimeParams.getProperty( "dynamicPropertyName1" );String dynamicPropertyValue2 = runtimeParams.getProperty( "dynamicPropertyName2" );// The rest of the implementation}// The rest of the overridden methods
}

注意区别,不是从JobContext获取属性,而是必须通过传递Job Context的执行ID从BatchRuntime的JobOperator获取动态运行时定义的属性。

希望这是有用的。

翻译自: https://www.javacodegeeks.com/2014/09/2-ways-of-passing-properties-parameters-in-java-ee-7-batch.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Csharp 打印Word文件默認打印機或選擇打印機設置代碼

//打印文檔object nullobj Missing.Value;//aDoc wordApp.Documents.Open(ref file,// ref nullobj, ref nullobj, ref nullobj,// ref nullobj, ref nullobj, ref nullobj,// ref nullob…

ESLint共享配置的两种方式eslint-plugin和eslint-config

使用ESLint很久了&#xff0c;也看了ESLint官方文档很多遍&#xff0c;但对于ESLint配置的规则还是不胜清楚&#xff0c;例如&#xff1a; {"extends": ["plugin:prettier/recommended"] }上面extends的值为什么要"plugin:"开头&#xff1f;这里…

使用aggregate在MongoDB中查找重复的数据记录

我们知道&#xff0c;MongoDB属于文档型数据库&#xff0c;其存储的文档类型都是JSON对象。正是由于这一特性&#xff0c;我们在Node.js中会经常使用MongoDB进行数据的存取。但由于Node.js是异步执行的&#xff0c;这就导致我们无法保证每一次的数据库save操作都是原子型的。也…

Gradle入门:创建二进制分发

创建有用的应用程序之后&#xff0c;很可能我们想与其他人共享它。 一种方法是创建一个可以从我们的网站下载的二进制发行版。 这篇博客文章描述了如何满足以下要求的二进制发行版&#xff1a; 我们的二进制分发绝对不能使用所谓的“胖子”方法。 换句话说&#xff0c;我们的…

我的Google Adsense帐户被关

一、 上周四&#xff0c;我收到Google的邮件&#xff0c;宣布关闭我的Adsense帐户。 "您好&#xff01; 查看了相关记录后&#xff0c;我们确认您的 AdSense 帐户存在引起无效活动的风险。保护 AdWords 广告客户&#xff0c;使其免受无效活动的侵害是我们的责任&#xff0…

网格布局之网格元素放置算法

接下来的网格元素放置算法将网格元素的自动位置解析为确定位置&#xff0c;确保每个网格元素具有布局明确的网格区域。&#xff08;Grid spans 不需要特别的解析&#xff1b;如果没有明确指定&#xff0c;默认是1&#xff09; 注意&#xff1a;当显式网格中没有位置放置自动放置…

csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...

ODP.NET: 引用&#xff1a; using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; //下载 http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html //引用&#xff1a;D:\app\geovindu…

AngularJS快速入门指南15:API

API即Application Programming Interface&#xff08;应用程序接口&#xff09;。 AngularJS全局API AngularJS全局API是一组全局JavaScript函数&#xff0c;用来进行一些常用的操作&#xff0c;例如&#xff1a; 比较两个对象迭代对象进行数据格式转换 全局API函数可以通过an…

Java 9幕后花絮:新功能从何而来?

找出Java幕后发生的事情&#xff0c;以及新功能如何实现 在上一篇文章中&#xff0c;我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能&#xff0c;并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人员&#xff0c;但大多数…

TypeScript 联合类型(union type)

TS是JS的超集&#xff0c;在JS的基础上添加了一套类型系统&#xff0c;这样的TS可以被静态分析带来的好处显而易见。 let val: string val;声明一个string类型的变量val。 let val: string val; val 1; // Type number is not assignable to type string.因为number类型和…

sudo apt-get install libstdc++6

sudo apt-get install libstdc6 yum install libncurses.so.5 sudo apt-get install libncurses.so.5 sudo apt-get install lib32ncurses5 apt-get update把源更新一下 使用gdb时的指令 (gbd) info line *0x08xxxx sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.…

AngularJS快速入门指南03:表达式

AngularJS通过表达式将数据绑定到HTML。 AngularJS表达式 AngularJS表达式写在双大括号中&#xff1a;{{ 表达式语句 }}。 AngularJS表达式绑定数据到HTML的方式与ng-bind指令的方式相同。 AngularJS会准确地将表达式“输出”为计算的结果。 AngularJS表达式与JavaScript表达式…

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践&#xff1a; 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续&#xff0c; 在上一次对于ArkTS的基础知识进行了学习&#xff0c;依照官方的课程计划&#xff0c;还有两个具体的小案例需要来实践实践&#xff1a; 实践出…

无状态Spring安全性第2部分:无状态身份验证

Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法。 如果您错过了CSRF的第一部分&#xff0c;可以在这里找到。 因此&#xff0c;在谈论身份验证时&#xff0c;其全部内容就是让客户端以可验证的方式向服务器标识自己。 通常&#xff0c;这始于服…

TypeScript 交叉类型(intersection type)

在TS中和联合类型(union type)对应的还有交叉类型(intersection type)。 交叉类型的出现主要为了组合多个对象类型(object type)&#xff0c;因为相对于interface&#xff0c;object type没法继承&#xff0c;那么就可以通过union type来实现混合的目的&#xff0c;从而实现继承…

【转】JAVA中的转义字符

JAVA中转义字符&#xff1a; 1.八进制转义序列&#xff1a;\ 1到3位5数字&#xff1b;范围\000~\377 \0&#xff1a;空字符 2.Unicode转义字符&#xff1a;\u 四个十六进制数字&#xff1b;0~65535 \u0000&#xff1a;空字符 3.特殊字符&#xff1a;就3个 \"&#xff1a…

八、VueJs 填坑日记之参数传递及内容页面的开发

我们在上一篇博文中&#xff0c;渲染出来了一个列表&#xff0c;并在列表中使用了router-link标签&#xff0c;标签内的&#xff1a;to就是链接地址&#xff0c;昨天咱们是<router-link :to"/content/ i.id">这样写的&#xff0c;今天我们来完成内容页面的渲染…

为Kindeditor控件添加图片自动上传功能

Kindeditor是一款功能强大的开源在线HTML编辑器&#xff0c;支持所见即所得的编辑效果。它使用JavaScript编写&#xff0c;可以无缝地与多个不同的语言环境进行集成&#xff0c;如.NET、PHP、ASP、Java等。官方网站可以查看这里&#xff1a;http://kindeditor.net/index.php Ki…

TypeScript类型推论(Type Inference)

要完全理解类型推论需要完整理解类型上下文&#xff0c;并且理解TS对于是否可以使用类型推论是基于静态分析完成的。 上下文类型应用在许多地方。常见的例子包括函数调用的参数&#xff0c;赋值的右手端位置&#xff0c;类型断言&#xff0c;对象和数组的成员&#xff0c;和返回…

4个万无一失的技巧让您开始使用JBoss BRMS 6.0.3

上周&#xff0c;红帽发布了标记为6.0.3的JBoss BRMS的下一版本&#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对该版本的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看版本说明和其余文档 。 我们正在寻找一些简单的方法来开始使用此新版本&#xff0…