Ich entwickle Spring Batch - XML to DB example
. In diesem Beispiel möchte ich XML-Daten in die DB laden. Nach der aktuellen Implementierung, wenn ich das Hauptprogramm ausführen, dann werden XML-Daten erfolgreich in die Datenbank geladen, wieder laufe ich das Hauptprogramm wieder Daten werden in DB geladen (mit vorherigen Läufen Ausgabe - für den zweiten Lauf, es ist alles Duplikate). Was ist, wenn ich keine alten Daten beibehalten möchte, d. H., Wenn ich den Hauptcode ausführe, sollte ich frische Daten (welche auch immer in DB vorhanden sind) in die Tabelle bekommen. Welche Konfiguration muss ich in der DB ändern?Spring Batch - XML zu DB - wie immer frische Daten (was immer in XML-Datei vorhanden ist) für mehrere Läufe?
federchargen context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:batch="http://www.springframework.org/schema/batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="classpath:context-datasource.xml"/>
<!-- ============= ItemReader which reads data from XML file ============= -->
<bean id="xmlItemReader" class="org.springframework.batch.item.xml.StaxEventItemReader">
<property name="resource" value="classpath:examResult.xml" />
<property name="fragmentRootElementName" value="ExamResult" />
<property name="unmarshaller">
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.websystique.springbatch.model.ExamResult</value>
</list>
</property>
</bean>
</property>
</bean>
<!-- ================ ItemWriter which writes data to database ================= -->
<bean id="databaseItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
<![CDATA[
insert into EXAM_RESULT(STUDENT_NAME, DOB, PERCENTAGE) values (?, ?, ?)
]]>
</value>
</property>
<!-- We need a custom setter to handle the conversion between Jodatime LocalDate and MySQL DATE -->
<property name="ItemPreparedStatementSetter">
<bean class="com.websystique.springbatch.ExamResultItemPreparedStatementSetter" />
</property>
</bean>
<!-- Optional ItemProcessor to perform business logic/filtering on the input records -->
<bean id="itemProcessor" class="com.websystique.springbatch.processor.ExamResultItemProcessor" />
<!-- Optional JobExecutionListener to perform business logic before and after the job -->
<bean id="jobListener" class="com.websystique.springbatch.utils.ExamResultJobListener" />
<!-- ==================== Actual Job ========================= -->
<batch:job id="examResultJob">
<batch:step id="step1">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="xmlItemReader" writer="databaseItemWriter" processor="itemProcessor" commit-interval="10" />
</batch:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="jobListener" />
</batch:listeners>
</batch:job>
</beans>