2017-01-08 4 views
1

私はSpring Batch - MongoDB to XMLの例を開発中です。私は私の主なプログラムを実行すると、コードを開発しました。私は次のエロが来るのを見る。私は何がうまくいかないのか分かりません。私は多くのリンクをたどったが、うまく動作していないとは思わない。org.springframework.dao.DataAccessResourceFailureException:ファイルリソースに書き込むことができません:[class path resource [report.xml]];スプリングバッチ

org.springframework.dao.DataAccessResourceFailureException: Unable to write to file resource: [class path resource [report.xml]]; nested exception is java.io.FileNotFoundException: class path resource [report.xml] cannot be resolved to URL because it does not exist 
    at org.springframework.batch.item.xml.StaxEventItemWriter.open(StaxEventItemWriter.java:436) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.item.xml.StaxEventItemWriter.open(StaxEventItemWriter.java:400) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:96) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.step.tasklet.TaskletStep.open(TaskletStep.java:310) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:197) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:169) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:306) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) [spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at com.mkyong.App.main(App.java:21) [classes/:na] 
Caused by: java.io.FileNotFoundException: class path resource [report.xml] cannot be resolved to URL because it does not exist 
    at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:187) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:48) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.batch.item.xml.StaxEventItemWriter.open(StaxEventItemWriter.java:427) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    ... 15 common frames omitted 
13:21:05.358 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Creating new transaction with name [org.springframework.batch.core.repository.support.SimpleJobRepository.updateExecutionContext]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
13:21:05.367 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Initiating transaction commit 
13:21:05.368 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Committing resourceless transaction on [org.springframework.batch.support.tra[email protected]5b202a3a] 
13:21:05.368 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Creating new transaction with name [org.springframework.batch.core.repository.support.SimpleJobRepository.update]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
13:21:05.375 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Initiating transaction commit 
13:21:05.375 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Committing resourceless transaction on [org.springframework.batch.support.tra[email protected]5669c5fb] 
13:21:05.379 [main] ERROR o.s.batch.core.step.AbstractStep - Exception while closing step execution resources in step step1 in job reportJob 
java.lang.NullPointerException: null 
    at org.springframework.batch.item.xml.StaxEventItemWriter.close(StaxEventItemWriter.java:659) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.item.support.CompositeItemStream.close(CompositeItemStream.java:85) ~[spring-batch-infrastructure-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.step.tasklet.TaskletStep.close(TaskletStep.java:305) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:271) ~[spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:169) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:306) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) [spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128) [spring-batch-core-3.0.7.RELEASE.jar:3.0.7.RELEASE] 
    at com.mkyong.App.main(App.java:21) [classes/:na] 
13:21:05.381 [main] DEBUG o.s.batch.core.step.AbstractStep - Step execution complete: StepExecution: id=1, version=2, name=step1, status=FAILED, exitStatus=FAILED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=0, rollbackCount=0 
13:21:05.381 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Creating new transaction with name [org.springframework.batch.core.repository.support.SimpleJobRepository.updateExecutionContext]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
13:21:05.383 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Initiating transaction commit 
13:21:05.383 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Committing resourceless transaction on [org.springframework.batch.support.tra[email protected]178213b] 
13:21:05.383 [main] DEBUG o.s.b.c.job.flow.support.SimpleFlow - Completed state=reportJob.step1 with status=FAILED 
13:21:05.385 [main] DEBUG o.s.b.c.job.flow.support.SimpleFlow - Handling state=reportJob.fail0 
13:21:05.385 [main] DEBUG o.s.b.c.job.flow.support.SimpleFlow - Completed state=reportJob.fail0 with status=FAILED 
13:21:05.388 [main] DEBUG o.s.batch.core.job.AbstractJob - Job execution complete: JobExecution: id=0, version=1, startTime=Sun Jan 08 13:21:05 IST 2017, endTime=null, lastUpdated=Sun Jan 08 13:21:05 IST 2017, status=FAILED, exitStatus=exitCode=FAILED;exitDescription=, job=[JobInstance: id=0, version=0, Job=[reportJob]], jobParameters=[{}] 
13:21:05.388 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Creating new transaction with name [org.springframework.batch.core.repository.support.SimpleJobRepository.update]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
13:21:05.397 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Initiating transaction commit 
13:21:05.397 [main] DEBUG o.s.b.s.t.ResourcelessTransactionManager - Committing resourceless transaction on [org.springframework.batch.support.tra[email protected]2d36e77e] 
13:21:05.397 [main] INFO o.s.b.c.l.support.SimpleJobLauncher - Job: [FlowJob: [name=reportJob]] completed with the following parameters: [{}] and the following status: [FAILED] 
Exit Status : FAILED 
Done 

ジョブreport.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:batch="http://www.springframework.org/schema/batch" xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
    xmlns:util="http://www.springframework.org/schema/util" 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 
     http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

     <!-- connect to mongodb --> 
    <mongo:mongo host="127.0.0.1" port="27017" /> 
    <mongo:db-factory dbname="yourdb" /> 

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    </bean> 

    <batch:job id="reportJob"> 
     <batch:step id="step1"> 
      <batch:tasklet> 
       <batch:chunk reader="mongodbItemReader" writer="xmlItemWriter" commit-interval="1"> 
       </batch:chunk> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

    <bean id="mongodbItemReader" class="org.springframework.batch.item.data.MongoItemReader"> 
     <property name="template" ref="mongoTemplate" /> 
     <property name="collection" value="report" /> 
     <property name="targetType" value="com.mkyong.Report" /> 
     <property name="query" value="" /> 
     <property name="sort"> 
      <util:map id="sort"> 
       <entry key="id" value="" /> 
      </util:map> 
     </property> 
    </bean> 

    <bean id="xmlItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter"> 
     <!-- <property name="resource" value="classpath:xml/report.xml" /> --> 
     <property name="resource" value="report.xml" /> 
     <property name="marshaller" ref="reportMarshaller" /> 
     <property name="rootTagName" value="record" /> 
    </bean> 

    <!-- ==== Solution-1 ==== --> 
    <bean id="reportMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
     <property name="classesToBeBound"> 
      <value>com.mkyong.Report</value> 
     </property> 
    </bean> 

    <!-- ==== Solution-2 ==== --> 
    <!-- <bean id="reportMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"> 
     <property name="aliases"> 
      <util:map id="aliases"> 
       <entry key="record" value="com.mkyong.Report" /> 
      </util:map> 
     </property> 
     <property name="converters"> 
      <array> 
       <ref bean="reportConverter" /> 
      </array> 
     </property> 
    </bean> --> 

    <bean id="reportConverter" class="com.mkyong.ReportConverter" /> 
</beans> 

Report.java

@XmlRootElement(name = "record") 
public class Report { 

    private int id; 
    private Date date; 
    private long impression; 
    private int clicks; 
    private BigDecimal earning; 

    @XmlAttribute(name = "id") 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @XmlElement(name = "date") 
    public Date getDate() { 
     return date; 
    } 

    public void setDate(Date date) { 
     this.date = date; 
    } 

    @XmlElement(name = "impression") 
    public long getImpression() { 
     return impression; 
    } 

    public void setImpression(long impression) { 
     this.impression = impression; 
    } 

    @XmlElement(name = "clicks") 
    public int getClicks() { 
     return clicks; 
    } 

    public void setClicks(int clicks) { 
     this.clicks = clicks; 
    } 

    @XmlElement(name = "earning") 
    public BigDecimal getEarning() { 
     return earning; 
    } 

    public void setEarning(BigDecimal earning) { 
     this.earning = earning; 
    } 
} 

App.java

public class App { 
    public static void main(String[] args) { 

     String[] springConfig = { "database.xml", "context.xml", "job-report.xml" }; 

     ApplicationContext context = new ClassPathXmlApplicationContext(springConfig); 

     JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); 
     Job job = (Job) context.getBean("reportJob"); 

     try { 
      JobExecution execution = jobLauncher.run(job, new JobParameters()); 
      System.out.println("Exit Status : " + execution.getStatus()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     System.out.println("Done"); 
    } 
} 

お待ちしております。

答えて

関連する問題