小编cof*_*akr的帖子

Spring Batch FlatFileItemWriter - 如何使用stepExecution.jobId生成文件名

我有这个FileWriter我试图将当前作业ID附加到生成的文件名.

<bean id="csvFileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
    <property name="resource">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg type="java.lang.String">
                <value>${csv.file}_#{stepExecution.jobExecution.jobId}</value>
            </constructor-arg>
        </bean>
    </property>
    <property name="lineAggregator">
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <property name="delimiter">
                <util:constant
                    static-field="org.springframework.batch.item.file.transform.DelimitedLineTokenizer.DELIMITER_COMMA"/>
            </property>
            <property name="fieldExtractor">
                <bean class="org.springframework.batch.item.file.transform.PassThroughFieldExtractor" />
            </property>
        </bean>
    </property>
    ....
....
Run Code Online (Sandbox Code Playgroud)

但它正在轰炸

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'stepExecution' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:208)
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:72)
    at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:52)
    at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:97)
    at org.springframework.expression.common.CompositeStringExpression.getValue(CompositeStringExpression.java:82)
    at org.springframework.expression.common.CompositeStringExpression.getValue(CompositeStringExpression.java:1)
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:139)
    ... 45 more
Run Code Online (Sandbox Code Playgroud)

知道如何jobId在这种情况下正确引用?

更新:添加工作解决方案

我实现了JobExecutionListener添加 …

spring-batch

7
推荐指数
1
解决办法
9765
查看次数

如果条件为假,如何跳过批处理步骤

我有一个基础工作,只有一个基本步骤.这个工作每x秒执行一次(我正在使用石英).然后在我的配置类中我也有变量"runStep".我应该在哪里添加此属性并仅在runStep为true时运行我的步骤?

<batch:job id="export1" parent="baseJob">
    <batch:step id="registruj" parent="baseStep">
        <tasklet>
            <chunk reader="registrujReader" processor="registrujProcessor" writer="registrujWriter"
                commit-interval="1" />
        </tasklet>
    </batch:step>
</batch:job>

<bean id="baseJob" class="org.springframework.batch.core.job.SimpleJob" abstract="true">
    <property name="jobRepository" ref="jobRepository" />
</bean>

<bean id="baseStep" class="org.springframework.batch.core.step.factory.SimpleStepFactoryBean" abstract="true">
    <property name="transactionManager" ref="transactionManager" />
    <property name="jobRepository" ref="jobRepository" />
    <property name="startLimit" value="100" />
    <property name="commitInterval" value="1" />
</bean>

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
    p:dataSource-ref="expDataSource" p:transactionManager-ref="transactionManager" />

<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
</bean>

<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
    <property name="jobRegistry" ref="jobRegistry" />
</bean>

<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />

<bean id="registrujWriter" class="cz.isvs.reg.rob.util.export.batch.RegistrujItemWriter" scope="step" />
<bean id="registrujReader" class="cz.isvs.reg.rob.util.export.batch.RegistrujItemReader" …
Run Code Online (Sandbox Code Playgroud)

spring-batch

3
推荐指数
1
解决办法
7962
查看次数

如何在gson上对泛型类型使用自定义反序列化?

对于标准POJO,我们可以使用以下内容

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(MyType2.class, new MyTypeAdapter());
gson.registerTypeAdapter(MyType.class, new MySerializer());
gson.registerTypeAdapter(MyType.class, new MyDeserializer());
gson.registerTypeAdapter(MyType.class, new MyInstanceCreator());
Run Code Online (Sandbox Code Playgroud)

如果POJO是通用的怎么样?该GSON用户指南中没有提到它.下面是我的代码,但它不是正确的.

gsonBuilder.registerTypeAdapter(CustomResponse<POJOA>.getClass(), new POJOADeserializer());
            gsonBuilder.registerTypeAdapter(CustomResponse<POJOB>.getClass(), new POJOBDeserializer());
            gsonBuilder.registerTypeAdapter(CustomResponse<POJOC>.getClass(), new POJOCDeserializer());
Run Code Online (Sandbox Code Playgroud)

java android json gson

3
推荐指数
1
解决办法
1164
查看次数

标签 统计

spring-batch ×2

android ×1

gson ×1

java ×1

json ×1