से जॉब पैरामीटर मैं कस्टम आइटम रीडर में नौकरी पैरामीटर इंजेक्ट करने की कोशिश कर रहा हूं। मैंने इस विषय पर सभी स्टैक ओवरफ्लो नोट्स की समीक्षा की है (उदाहरण: How to get access to job parameters from ItemReader, in Spring Batch?), और मुझे लगता है कि यह एक आम दर्द बिंदु है जो ज्यादातर अनसुलझा है। मुझे आशा है कि एक वसंत गुरु (@ माइकल मिनेला कोई भी) इसे देखेगा और कुछ अंतर्दृष्टि प्राप्त करेगा।स्प्रिंग बैच
मुझे यह निर्धारित करने के लिए मिला है कि जॉबपरमीटर 10 रनों में से एक के बारे में उपलब्ध हैं, यहां तक कि कोई कोड या कॉन्फ़िगरेशन परिवर्तन नहीं है। यह एक यादृच्छिक विफलता की बजाय यादृच्छिक सफलता का मामला है, इसलिए यह ट्रैक करने के लिए कड़ी मेहनत कर रहा है।
मैंने डीबगर के साथ वसंत कोड में खोला, और यह निर्धारित किया कि जब यह विफल हो जाता है, तो नाम नौकरी का कोई बीन नहीं होता है जब इंजेक्शन हो रहा है वसंत में पैरामीटर पंजीकृत है।
मैं वसंत 4.1.4 का उपयोग कर रहा वसंत बैच 3.0.2 और वसंत-डेटा-जेपीए 1.7.1 और वसंत-डेटा-कॉमन्स 1.9.1 के साथ, जावा में चल 8.
जावा वर्ग
@Component("sourceSelectionReader")
@Scope("step")
public class SourceSelectionReaderImpl
implements ItemReader<MyThing> {
private Map<String,Object> jobParameters;
// ... snip ...
@Autowired
@Lazy
@Qualifier(value="#{jobParameters}")
public void setJobParameters(Map<String, Object> jobParameters) {
this.jobParameters = jobParameters;
}
}
नौकरी लांच पैरामीटर:
launch-context.xml job1 jobid(long)=1
लांच-context.xml (ऋण फुलाना):
<context:property-placeholder location="classpath:batch.properties" />
<context:component-scan base-package="com.maxis.maximo.ilm" />
<jdbc:initialize-database data-source="myDataSource" enabled="false">
<jdbc:script location="${batch.schema.script}" />
</jdbc:initialize-database>
<batch:job-repository id="jobRepository"
data-source="myDataSource"
transaction-manager="transactionManager"
isolation-level-for-create="DEFAULT"
max-varchar-length="1000"/>
<import resource="classpath:/META-INF/spring/module-context.xml" />
मॉड्यूल-context.xml (ऋण फुलाना):
<description>Example job to get you started. It provides a skeleton for a typical batch application.</description>
<import resource="classpath:/META-INF/spring/hibernate-context.xml"/>
<import resource="classpath:/META-INF/spring/myapp-context.xml"/>
<context:component-scan base-package="com.me" />
<bean class="org.springframework.batch.core.scope.StepScope" />
<batch:job id="job1">
<batch:step id="step0002" >
<batch:tasklet transaction-manager="transactionManager" start-limit="100" >
<batch:chunk reader="sourceSelectionReader" writer="selectedDataWriter" commit-interval="1" />
</batch:tasklet>
</batch:step>
</batch:job>
आप नौकरी कैसे लॉन्च करते हैं? – wassgren
और, आप इंजेक्शन के लिए '@ Lazy' का उपयोग क्यों कर रहे हैं? क्या यह आपके काम के लिए जरूरी है? – wassgren
मैं अब अपने ग्रहण आईडीई के भीतर से नौकरी लॉन्च कर रहा हूं। यह लाइव होने पर कमांड लाइन से लॉन्च किया जाएगा। मैं @Lazy का उपयोग करता हूं क्योंकि यह मुझे इस समस्या को दूर करने और वास्तविक परियोजना के साथ आगे बढ़ने की अनुमति देता है, एक संकल्प लंबित है। पैरामीटर को बीन में लाने के अन्य तरीके हैं लेकिन वे लंबे समय तक समर्थन समस्याओं का निर्माण करेंगे। –