Príklad jarnej dávky - súbor XML do databázy MongoDB
Spring Batch Example Xml File Mongodb Database
V tomto tutoriále vám ukážeme, ako nakonfigurovať úlohu Spring Batch na odstránenie údajov zo súboru XML ( XStream Knižnica) načítať do databázy bez SQL ( MongoDB ) v. Okrem toho vytvorte testovací prípad jednotky na spustenie a otestovanie dávkovej úlohy.
Použité nástroje a knižnice
- Maven 3
- Zatmenie 4.2
- JDK 1.6
- Jarné jadro 3.2.2. uvoľnenie
- Jarná šarža 2.2.0. uvoľnenie
- Test jarnej dávky 2.2.0. UVOĽNENIE
- Pružina OXM 3.2.2. uvoľnenie
- Ovládač MongoDB Java 2.11.2
- MongoDB 2.2.3
- JUnit 4.11
- SKÚŠKA 6.8.5
PS Tento príklad-súbor XML (čítačka) -MongoDB (zapisovač).
1. Jednoduchý projekt Java
1. Použite Maven na vytvorenie rýchleho spustenia Java Projectu, jeho prevedenie a import do Eclipse IDE.
$ mvn archetype:generate -DgroupId=com.mkyong -DartifactId=SpringBatchExample2 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
$ cd SpringBatchExample/ $ mvn eclipse:eclipse
2. Závislosti projektu
in pom.xml
Deklarujte všetky závislosti projektu
4.0.0 com.mkyong SpringBatchExample jar 1.0-SNAPSHOT SpringBatchExample http://maven.apache.org 1.6 3.2.2.RELEASE 2.2.0.RELEASE 1.2.1.RELEASE 2.11.2 org.springframework spring-core ${spring.version} org.springframework spring-oxm ${spring.version} org.springframework.batch spring-batch-core ${spring.batch.version} org.springframework.batch spring-batch-infrastructure ${spring.batch.version} org.springframework.batch spring-batch-test ${spring.batch.version} org.mongodb mongo-java-driver ${mongodb.driver.version} org.springframework.data spring-data-mongodb ${spring.data.version} junit junit 4.11 test org.testng testng 6.8.5 test spring-batch org.apache.maven.plugins maven-eclipse-plugin 2.9 true false org.apache.maven.plugins maven-compiler-plugin 2.3.2 ${jdk.version} ${jdk.version}
3. Štruktúra adresára projektu
V záverečnej štruktúre projektu nájdete prehľad ďalších krokov.

4. XML súbor
Toto je súbor XML v priečinku prostriedkov.
resources / xml / report.xml
6/1/2013 139,237 40 220.90 6/2/2013 339,100 60 320.88 6/3/2013 431,436 76 270.80
5. Prečítajte si súbor XML
Pri jarnom dávkovom spracovaní môžeme použiť StaxEventItemReader
Prečítať súbor XML a použiť XStreamMarshaller
Namapovať hodnoty a atribúty XML na objekty.
package com.mkyong.model import java.math.BigDecimal import java.text.SimpleDateFormat import java.util.Date public class Report { private int id private Date date private long impression private int clicks private BigDecimal earning //getter and setter methods }
Report.java Date
Ak chcete namapovať hodnotu XML na BigDecimal
pomocou converter
„Komplexného“ dátového typu triedy, musíte pripojiť vlastný package com.mkyong.converter import java.math.BigDecimal import java.text.NumberFormat import java.text.ParseException import java.text.SimpleDateFormat import java.util.Date import java.util.Locale import com.mkyong.model.Report import com.thoughtworks.xstream.converters.Converter import com.thoughtworks.xstream.converters.MarshallingContext import com.thoughtworks.xstream.converters.UnmarshallingContext import com.thoughtworks.xstream.io.HierarchicalStreamReader import com.thoughtworks.xstream.io.HierarchicalStreamWriter public class ReportConverter implements Converter { @Override public boolean canConvert(Class type) { //we only need 'Report' object return type.equals(Report.class) } @Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { //do nothing } @Override public Object unmarshal( HierarchicalStreamReader reader, UnmarshallingContext context) { Report obj = new Report() //get attribute obj.setId(Integer.valueOf(reader.getAttribute('id'))) reader.moveDown() //get date Date date = null try { date = new SimpleDateFormat('M/d/yyyy').parse(reader.getValue()) } catch (ParseException e) { e.printStackTrace() } obj.setDate(date) reader.moveUp() reader.moveDown() //get impression String impression = reader.getValue() NumberFormat format = NumberFormat.getInstance(Locale.US) Number number = 0 try { number = format.parse(impression) } catch (ParseException e) { e.printStackTrace() } obj.setImpression(number.longValue()) reader.moveUp() reader.moveDown() //get click obj.setClicks(Integer.valueOf(reader.getValue())) reader.moveUp() reader.moveDown() //get earning obj.setEarning(new BigDecimal(reader.getValue())) reader.moveUp() return obj } }
Ak chcete hodnotu ručne previesť a namapovať.
mongoTemplate
6. Databáza MongoDB
Definujte inštanciu mongodb a jobRepository
。
jobLauncher
7. Základné nastavenia Spring Batch
definícia report.xml
s Report
。
MongoDB
8. Jarná dávková práca
Jarná dávková úloha, prečítať //write it to MongoDB, 'report' collection (table)
Súbor, namapovaný na JobLauncherTestUtils
Objekt a napísať ho package com.mkyong import static org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith import org.springframework.batch.core.BatchStatus import org.springframework.batch.core.JobExecution import org.springframework.batch.test.JobLauncherTestUtils import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.junit4.SpringJUnit4ClassRunner @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { 'classpath:spring/batch/jobs/job-report.xml', 'classpath:spring/batch/config/context.xml', 'classpath:spring/batch/config/database.xml', 'classpath:spring/batch/config/test-context.xml'}) public class AppTest { @Autowired private JobLauncherTestUtils jobLauncherTestUtils @Test public void launchJob() throws Exception { //JobExecution jobExecution = jobLauncherTestUtils.launchJob() JobExecution jobExecution = jobLauncherTestUtils.launchStep('step1') assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()) } }
。 Prečítajte si recenzie, malo by to byť zrozumiteľné.
package com.mkyong import org.springframework.batch.core.BatchStatus import org.springframework.batch.core.JobExecution import org.springframework.batch.test.JobLauncherTestUtils import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.testng.AbstractTestNGSpringContextTests import org.testng.Assert import org.testng.annotations.Test @ContextConfiguration(locations = { 'classpath:spring/batch/jobs/job-report.xml', 'classpath:spring/batch/config/context.xml', 'classpath:spring/batch/config/database.xml', 'classpath:spring/batch/config/test-context.xml'}) public class AppTest2 extends AbstractTestNGSpringContextTests { @Autowired private JobLauncherTestUtils jobLauncherTestUtils @Test public void launchJob() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob() Assert.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED) } }
9. Testovanie jednotky
Na jednotkové testovanie použite rámec jUnit alebo TestNG. Najskôr musíte ručne deklarovať mongo MongoDB shell version: 2.2.3 connecting to: test > use yourdb switched to db yourdb > show collections report system.indexes > db.report.find() { '_id' : 1, '_class' : 'com.mkyong.model.Report', 'date' : ISODate('2013-05-31T16:00:00Z'), 'impression' : NumberLong(139237), 'clicks' : 40, 'earning' : '220.90' } { '_id' : 2, '_class' : 'com.mkyong.model.Report', 'date' : ISODate('2013-06-01T16:00:00Z'), 'impression' : NumberLong(339100), 'clicks' : 60, 'earning' : '320.88' } { '_id' : 3, '_class' : 'com.mkyong.model.Report', 'date' : ISODate('2013-06-02T16:00:00Z'), 'impression' : NumberLong(431436), 'clicks' : 76, 'earning' : '270.80' } >
。
|_+_|
jUnit príklad
AppTest.java|_+_|
Príklad TestNG
AppTest2.java|_+_|
Výkon. Hodnota XML sa vloží do MongoDB.
|_+_|
10. Čo tak metadáta práce?
Prepáčte, zatiaľ nemám riešenie. Pokiaľ viem, metadáta úloh si vyžadujú relačnú databázu, aby sa zabezpečila reštartovateľnosť a vrátenie úlohy. Podľa návrhu MongoDB nemá „spoľahlivé“ riadenie transakcií.
Riešenie 1: Vytvorte ďalšiu relačnú databázu na ukladanie metadát úloh, hm ... znie to hlúpo, ale funguje to. Máte lepšiu predstavu?
Riešenie 2: Počkajte, kým jarný tím príde s riešením tohto problému.
Stiahnite si zdrojový kód
Stiahnuť to - SpringBatch-XML-MongoDB-Example.zip (81 kB)referencie
- Výukový program pre prevodník XStream
- Podpora Spring Batch pre non-RDBMS
- Čítačka a zapisovačka jarných dávok XML
- Jarná dávka - konfigurujte a spúšťajte úlohy
- Použite Maven na vytvorenie projektu Java
Od: https://mkyong.com/spring-batch/spring-batch-example-xml-file-to-database/