0

私の春のバッチプロジェクトでは、次のようなことができます:

<bean id="exampleTasklet" class="my.custom.Tasklet">
    <property name="message" value="job parameter value: #{jobParameters['arg1']}"/>
</bean>

メッセージ プロパティには、Spring バッチ ジョブ パラメーターから取得された値が含まれます。しかし、実際に割り当てたい値は非常に大きく、xml ファイルには入れたくありません。この構文が機能しないことはわかっていますが、次のようなことをしたいと思います。

<bean id="exampleTasklet" class="my.custom.Tasklet">
    <property name="message" read-value-from-file="/path/to/file.txt"/>
</bean>

そのファイルには、ファイルの内容が value="" 属性にあるかのように Spring が解析する "job parameter value: #{jobParameters['arg1']}" という行が含まれます。

これを行う良い方法はありますか?

4

3 に答える 3

1

あなたが探しているのはPropertyPlaceholderConfigurerだと思います。

<bean  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <property name="location" value="/path/to/file.properties" /> 
    <property name="placeholderPrefix" value="#{" /> 
    <property name="placeholderSuffix" value="}" /> 
</bean>

これは Spring によって Bean プロセッサとして実行され、プレースホルダー トークンの解決を試みます。次の表記法を使用して、システム プロパティに対して解決される既定のインスタンスがあります${propertyname}placeholderPrefix表記については、 /を指定する必要がありますSuffix。複数の Bean プロセッサがある場合、順序はorderプロパティによって決定されます。デフォルトでは、プロセッサーがプレースホルダーの解決に失敗した場合、実行は失敗しますが、これは を設定することで変更できますignoreUnresolvablePlaceholders。このメカニズムはプロパティ駆動型であるため、次のような表記法を検討することをお勧めします。

<property name="message" value="job parameter value: #{jobParameters.arg1}"/>

または、伝えようとしているものがarg1パラメーターでもある場合は、次のことを試してください。

<property name="message" value="job parameter value: #{jobParameters.${arg1}}"/>

Spring は、置換が実行されなくなるか、例外が発生するまで、Bean プロセッサをループします。したがって、プロパティの定義${something.${orOther}}は有効です。

于 2012-08-06T21:34:57.613 に答える
0

ファイル名として文字列を使用し、Beanでそのファイルを開くことをお勧めします。
私はあなたの問題を正しく理解するかどうかわかりません。私はSpringMessageBundleのようなものを提案しているだけです

このようなもの:

<bean id="exampleTasklet" class="my.custom.Tasklet">
    <property name="messagePath" location="/path/to/file.txt"/>
</bean>


そして、あなたexampleTaskletのファイルを読んであなたのことをしてください(それが何であるかはわかりません)

于 2012-08-07T05:52:34.747 に答える
0

誰かがプロパティファイルからこのようなことをするためにここに来た場合:

.properties ファイルのプロパティを に表示するJobParameters場合、すぐに使用できるソリューションは見つかりません。次のことができます。

  1. プロパティ ファイルに Bean をラップします。
  2. この Bean を にアクセスできる別の Bean に渡しJobParameters、ファイルからそのクラスにプロパティを送り込むことができます。
  3. 次に、Spring の Expression Language を使用してプロパティにアクセスし、次のようにすることができます。 <bean id="myBean" class="my.custom.Bean"> <property name="prop" value="#{jobParameters['arg1']}"/> </bean>

あるいは、 Devon_C_Miller によって提案されたソリューションの方がはるかに簡単だと思います。その後にプロパティがありませんJobParameters。ただし、XML 構成での置換だけが必要な場合は、プレースホルダーを次のように変更するだけです。

${myPropFromFile}

皆さん、ハッピー バッチング ;-)

于 2013-03-14T09:23:12.657 に答える