2013-09-06 2 views
0

누군가이 코드를 살펴보고 오류의 원인을 찾아 낼 수 있습니까? 'beanName은 비워 둘 수 없습니다.스프링 일괄 처리 작업에서 'beanName'오류가 발생하지 않아야합니다.

스프링 도구 모음 3.3.0을 사용하고 있습니다.

작업 통계 또는 기타 사항을 유지하지 않는 작은 스프링 배치 작업을 작성하려고합니다. 스프링 프레임 워크를 사용하고 싶습니다. 이것은 전체 작업이 아니지만이 문제를 극복하는 데 어려움을 겪고 있습니다.

이것은 한 걸음 내 간단한 작업입니다. 빈 빈은 어디 있습니까 ??

내 스프링 배치 코드 : 그것은 빈 거기에 중요한 경우

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springframework.org/schema/batch" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:property-placeholder location="classpath:batch.properties" /> 

    <context:component-scan base-package="com.mycompany.batch" /> 

    <bean id="transactionManager" 
     class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" /> 

    <bean id="jobRepository" 
     class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> 
     <property name="transactionManager" ref="transactionManager" /> 
    </bean> 

    <bean id="jobLauncher" 
     class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
     <property name="jobRepository" ref="jobRepository" /> 
    </bean> 

    <!-- <import resource="classpath:/META-INF/spring/module-context.xml" /> --> 

    <batch:job id="vendorGoalsJob" restartable="true"> 

     <batch:step id="checkStartFileExists"> 
      <batch:tasklet ref="startFileExistsTasklet" /> 
     </batch:step> 

    </batch:job> 

    <bean id="startFileExistsTasklet" 
     class="com.mycompany.batch.domain.vendor.goal.StartFileExistsTasklet"> 
     <property name="path" value="${filepath}" /> 
     <property name="file" value="${filename}" /> 
    </bean> 
</beans> 



2013-09-06 10:12:56,214 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - <Refreshing org[email protected]67ac19: startup date [Fri Sep 06 10:12:56 CDT 2013]; root of context hierarchy> 
2013-09-06 10:12:56,261 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Loading XML bean definitions from class path resource [launch-context.xml]> 
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [launch-context.xml]; nested exception is java.lang.IllegalArgumentException: 'beanName' must not be empty 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126) 
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92) 
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) 
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.glazers.batch.domain.vendor.goal.VendorGoalLauncher.doit(VendorGoalLauncher.java:39) 
    at com.glazers.batch.domain.vendor.goal.VendorGoalLauncher.main(VendorGoalLauncher.java:32) 
Caused by: java.lang.IllegalArgumentException: 'beanName' must not be empty 
    at org.springframework.util.Assert.hasText(Assert.java:162) 
    at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:58) 
    at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:46) 
    at org.springframework.batch.core.configuration.xml.AbstractStepParser.setUpBeanDefinitionForTaskletStep(AbstractStepParser.java:155) 
    at org.springframework.batch.core.configuration.xml.AbstractStepParser.parseTasklet(AbstractStepParser.java:133) 
    at org.springframework.batch.core.configuration.xml.AbstractStepParser.parseStep(AbstractStepParser.java:85) 
    at org.springframework.batch.core.configuration.xml.InlineStepParser.parse(InlineStepParser.java:59) 
    at org.springframework.batch.core.configuration.xml.FlowParser.doParse(FlowParser.java:119) 
    at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85) 
    at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59) 
    at org.springframework.batch.core.configuration.xml.JobParser.doParse(JobParser.java:95) 
    at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85) 
    at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59) 
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1338) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1328) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) 
    ... 15 more 

, 여기 내 태스크 릿 클래스

package com.mycompany.batch.domain.vendor.goal; 

import java.io.File; 

import org.springframework.batch.core.StepContribution; 
import org.springframework.batch.core.scope.context.ChunkContext; 
import org.springframework.batch.core.step.tasklet.Tasklet; 
import org.springframework.batch.repeat.RepeatStatus; 

public class StartFileExistsTasklet implements Tasklet { 

    private String path; 
    private String file; 

    @Override 
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 

     StringBuffer sb = new StringBuffer(); 
     sb.append(path.trim()).append(File.pathSeparator).append(file.trim()); 

     File f = new File(sb.toString()); 

     if (f.isFile()) 
      chunkContext.getStepContext().getStepExecution().setTerminateOnly(); 

     return RepeatStatus.FINISHED; 

    } 

    public void setPath(String path) { 
     this.path = path; 
    } 

    public void setFile(String file) { 
     this.file = file; 
    } 

} 

답변

0

는 어디서 찾을 스프링 배치 코드를 디버깅하기 시작 그게 실패했는지 확인하십시오. 디버그 스테퍼가 실제 실행 코드에서 멈추지 않고있는 것으로 나타났습니다. 그것은 내가 classpath와 병 문제를 가지고 있다고 생각하게했다. 그래서 필자는 필자가 사용하고있는 버전을 확인하기 위해 필자의 maven 의존성을 살펴 보았다. My Good 배치 프로젝트는 Spring jar 3.2.2를 사용하고 실패한 프로젝트는 3.0.6이었다. 그것이 나의 첫번째 단서였습니다. 이건 옳지 않아!

그래서 pom.xml을 3.2.2로 변경하여 수정했습니다. 그런 다음, 실패한 프로젝트에 수동으로 추가 한 다른 버전 일치하지 않는 병이 있음을 깨달았습니다. 나는 그것을 제거하고, 행성들을 정렬 시켰고, 모든 것이 잘되었다.

프로젝트 마법사가 서로 다른 두 가지 버전의 스프링 프레임 워크를 선택하는 방법에 대해 궁금한 점이 있지만 며칠 동안 좌절감을 느낀 후에도 제대로 작동한다는 것을 알게되어 기뻤습니다.

이 질문을 읽은 모든 분들께 감사드립니다.

관련 문제