Jar

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



  1. Maven 3
  2. Zatmenie 4.2
  3. JDK 1.6
  4. Jarné jadro 3.2.2. uvoľnenie
  5. Jarná šarža 2.2.0. uvoľnenie
  6. Test jarnej dávky 2.2.0. UVOĽNENIE
  7. Pružina OXM 3.2.2. uvoľnenie
  8. Ovládač MongoDB Java 2.11.2
  9. MongoDB 2.2.3
  10. JUnit 4.11
  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

pom.xml 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.

Jar -xml mongodb

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.

zdroje / jar / dávka / úlohy / job-report.xml 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ť.

ReportConverter.java mongoTemplate

6. Databáza MongoDB

Definujte inštanciu mongodb a jobRepository

resources / spring / batch / config / database.xml jobLauncher

7. Základné nastavenia Spring Batch

definícia report.xml s Report

resources / spring / batch / config / context.xml 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é.

zdroje / jar / dávka / úlohy / job-report.xml 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' } >

test / resources / spring / batch / config / test-context.xml
|_+_|

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

  1. Výukový program pre prevodník XStream
  2. Podpora Spring Batch pre non-RDBMS
  3. Čítačka a zapisovačka jarných dávok XML
  4. Jarná dávka - konfigurujte a spúšťajte úlohy
  5. Použite Maven na vytvorenie projektu Java
štítok: MongoDB Jarná dávka XML

Od: https://mkyong.com/spring-batch/spring-batch-example-xml-file-to-database/