我工作的公司有很多"复杂"的基于文件的批处理过程,文件序列如下:
每个步骤可能需要几个小时才能运行(文件可能包含数十亿行数据).与GNU Makefiles粘合在一起,其中包括以下部分:
fileC:fileD run-analysis $ ^> $ @
makefile文件是建模步骤之间的依赖关系,以及允许后一切要重复某个步骤(如果有一个步骤中的问题,或启发式改变等)是有用的.
使用Makefile对我来说总是很糟糕,因为它们用于构建软件,而不是运行批处理.此外,Makefile不提供任何形式的测试框架.
我的问题是,你如何协调像这样的大型序列大型操作?
所以我从.bat文件开始一个consol程序.我希望它作为一个进程运行,但不显示任何窗口.怎么办这样的事情?
我正在处理一个大型的csv文件,我发现这篇关于批量导入的文章:http://naleid.com/blog/2009/10/01/batch-import-performance-with-grails-and-mysql/.我试图做同样的事,但似乎没有效果.
每次刷新后,实例是否可以在数据库中查看?因为当我尝试查询'SELECT COUNT(*)FROM TABLE1'时,现在有0或所有entites,所以它看起来像是一次提交所有实例.
然后我还注意到,当第一次导入到空白表时,导入工作很快,但是当表已满并且实体应该更新或保存为新实体时,整个过程非常慢.这主要是因为内存没有被清理,减少到1MB或更少,应用程序卡住了.那是因为没有刷新会话?
我的导入代码在这里:
public void saveAll(List<MedicalInstrument> listMedicalInstruments) {
log.info("start saving")
for (int i = 0; i < listMedicalInstruments.size() - 1; i++) {
def medicalInstrument = listMedicalInstruments.get(i)
def persistedMedicalInstrument = MedicalInstrument.findByCode(medicalInstrument.code)
if (persistedMedicalInstrument) {
persistedMedicalInstrument.properties = medicalInstrument.properties
persistedMedicalInstrument.save()
} else {
medicalInstrument.save()
}
if ((i + 1) % 100 == 0) {
cleanUpGorm()
if ((i + 1) % 1000 == 0) {
log.info("saved ${i} entities")
}
}
}
cleanUpGorm()
}
protected void cleanUpGorm() { …Run Code Online (Sandbox Code Playgroud) 这是一个非常简单的设置.我有一个潜在的5m记录的文件,我需要阅读并做一些工作,然后发送到数据库.处理和写作的机制并不重要.我需要能够将路径和文件名[/opt/etc/app/partner/input_file.csv]作为参数传递给进程.这很容易,将它添加到JobParameters并将其提供给JobLauncher.
JobParametersBuilder jpBuilder = new JobParametersBuilder() ;
jpBuilder.addString("filePath", "/opt/etc/app/partner/input_file.csv") ;
jobLauncher.run(job, jpBuilder.toJobParameters() ;
Run Code Online (Sandbox Code Playgroud)
完成,现在让上下文意识到它.再次简单的引用jobParameters问题.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<description>PoC to demonstrate variable row content handling</description>
<batch:job id="poc" job-repository="jobRepository" incrementer="runIdIncrementer" restartable="true">
<batch:step id="pocReadWriteStep">
<batch:partition step="step" partitioner="partitioner">
<batch:handler task-executor="taskExecutor"/>
</batch:partition>
</batch:step>
</batch:job>
<batch:step id="step">
<batch:tasklet task-executor="taskExecutor" throttle-limit="20" transaction-manager="transactionManager" allow-start-if-complete="true">
<batch:transaction-attributes isolation="READ_UNCOMMITTED"/>
<batch:chunk
reader="reader"
processor="processor"
writer="writer"
commit-interval="20">
</batch:chunk>
</batch:tasklet>
</batch:step>
<bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="file:#{jobParameters['filePath']}"/>
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.PatternMatchingCompositeLineMapper">
<property name="tokenizers">
<map>
<entry …Run Code Online (Sandbox Code Playgroud) 我是Spring-Batch的新手,我想知道是否有办法从ItemReader或ItemWriter中访问step-id?
在我的情况下,允许在单个ItemReader实现中基于不同的步骤定义来切换枚举类型.
有谁知道这样做的方法?
任何人都可以告诉我如何通过JCL提交我的REXX -Script 的JOBID?
例如,JOBNAME没问题,但到目前为止我还没有在任何ControlBlock中找到对JOBID的引用.
非常感谢你提前!
我的SAS代码包含多个data步骤,并且proc sql- >彼此无关.其中一些可能会抛出错误.发生这种情况时,其余代码将终止.
我需要我的代码继续执行.即使抛出错误,只需将其放入日志中,ERROR : ... 但仍然继续执行.我怎样才能做到这一点 ?
我从这里尝试了一些选项
options noerrorabend;
但我找不到任何有用的东西
我有一个包含相关ID号的数千个文本字符串的文件.我想获取每个不同的文本字符串并使其成为文本的JPG图像,并使用相关的ID号命名文件.
所有字符串最多为75个字符,因此我不需要担心图像的动态调整大小以补偿更长的字符串.我只想设置一个图像大小.
我使用Irfanview来满足大多数批量成像需求,并且考虑到它的灵活性,我认为有一种方法可以做到这一点.有谁知道如何做到这一点?
我有一个批处理脚本,应该可以访问一个名为类似的变量env:dev,所以它里面有一个冒号...这个变量是由第三方组件设置的,所以我对这个命名没有影响......
如何在批处理脚本中访问此变量的内容?我知道这:是一个特殊的角色,所以我可以逃避它吗?以下不起作用:
echo %env:dev%
echo "%env:dev%"
echo %env^:dev%
...
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有一个Rexx程序,要作为批处理作业运行。我怎样才能做到这一点?
这是我的程序:
/* Rexx – HELLO – Write Hello World */
Say "hello World"
Run Code Online (Sandbox Code Playgroud)
该程序位于作为成员HELLO的PDS ME.USER.EXEC。
我的安装有效的作业卡是(我们的环境包括ISPF / PDF而不是ROSCOE):
//MYJOB JOB ,,CLASS=1,MSGCLASS=H,NOTIFY=&SYSUID
Run Code Online (Sandbox Code Playgroud)
注意!这已经被写成一个教程
batch-processing ×10
java ×2
rexx ×2
spring-batch ×2
zos ×2
batch-file ×1
command-line ×1
grails ×1
irfanview ×1
makefile ×1
sas ×1
spring ×1
startup ×1
tso ×1
windows ×1