0

我是春季批次的新手,所以在这里询问一些基本建议。

在 spring 作业/步骤运行时将配置文件加载到内存(或 bean)中并使用其内容的最佳方法是什么?

我不确定,但基于一些谷歌搜索,我发现了以下场景,即使我不太明白为什么我应该定义一个作家,即使我不需要它:

  1. step1 : 加载配置文件(内容是由=分隔的两个字段)
  2. step2 : 执行一些java代码并使用之前的配置文件

所以对于第 1 步:

<bean id="inputFile" class="org.springframework.core.io.FileSystemResource" scope="step">
    <constructor-arg value="path_config_file"/>
</bean>

<bean id="readerConfigFile" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="resource" ref="inputFile"/>
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="names" value="field,value"/>
                    <property name="delimiter" value="="/>
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="configProperties"/>
                </bean>
            </property>
        </bean>
    </property>
</bean>

<bean id="outputConfig" class="outputConfig"></bean>

<bean id="configProperties" class="configProperties" scope="prototype"/>

所以我的问题是:

  1. 如何使用文件中收集的信息?我应该把它们放在 Java bean 中吗?
  2. 如何在不同步骤之间传递此信息或使它们在整个应用程序生命周期中持久存在?
  3. 你会推荐使用 itemProcessor 来实现上述目标吗?

非常欢迎任何建议

4

1 回答 1

2

我对你的问题有点困惑,因为我认为你只需要在 spring 上下文中加载一个属性文件,使用PropertiesFactoryBean

    <bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
      <property name="location">
        <value>file:path_config_file</value>
      </property>
    </bean>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="propertiesArray">
        <list>
          <ref bean="config"/>
        </list>
      </property>
    </bean>

并且您可以使用 ${} 占位符来引用属性值;但是这个解决方案与spring-batch无关;我不需要它!

关于您的问题:

  1. 使用 POJO 是一种好方法,因为 spring-batch 提供了内置映射策略(BeanWrapperFieldSetMapper在您的情况下)
  2. 作业中使用的对象只能在作业上下文中访问,而不能在应用程序上下文中访问(这就是我认为您需要 a 的原因PropertiesFactoryBean)。
    在步骤之间传递对象读取我们如何在 Spring Batch 中作业的不同步骤之间共享数据?
  3. ItemProcessor如果您需要T将从 a 读取的对象转换为由 aItemReader<T>写入的类型 S 的对象,则需要ItemWriter<S>。所以不,你不需要ItemProcessor.

我希望我很清楚,英语不是我的母语

于 2013-09-06T10:01:55.073 回答