2017-06-04 6 views
0

ループでSpringバッチジョブを実行する必要があります。XMLスキーマ名前空間spring-batch用のSpring NamespaceHandlerを見つけることができません

だから私のメインクラスは以下の通りです:

package com.mypackage.batch; 

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

    String[] springConfig = {"spring/batch/jobs/myJob.xml"}; 

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(springConfig); 

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

    // read the file containing accountIds 
    try (BufferedReader br = new BufferedReader(new FileReader(args[0]))) { 
     String account; 
     while ((account = br.readLine()) != null) { 

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

    context.close(); 
} 
} 

これはEclipseで完全に正常に動作します。

これをサーバーで実行します。このために、実行可能なjarファイルを作成します。

私はMavenのアセンブリのプラグインを使用して、以下のようにそれを作成しています:私は、次のコマンドを実行したときに

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>com.mypackage.batch.myApp</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

これは、依存関係を持つjarファイルを作成するには、しかしmyBatch-jar-with-dependencies.jar

を言う:

java -jar myBatch-jar-with-dependencies.jar abc.txt 

次のエラーが表示されます。

Jun 04, 2017 12:25:40 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]4edde6e5: startup date [Sun Jun 04 12:25:40 AWST 2017]; root of context hierarchy 
Jun 04, 2017 12:25:40 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [spring/batch/jobs/myJob.xml] 
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/batch] 
Offending resource: class path resource [spring/batch/jobs/myJob.xml] 

     at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70) 
     at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) 
     at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80) 
     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:301) 
     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1408) 
     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401) 
     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:172) 
     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142) 
     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94) 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508) 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392) 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252) 
     at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 
     at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 
     at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) 
     at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) 
     at com.mypackage.batch.myApp.main(myApp.java:17) 

春のバッチXMLでの私のスキーマ定義である:

<?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.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"> 

そして、私のポンポンで依存関係は次のとおりです。

<properties> 
     <jdk.version>1.8</jdk.version> 
     <spring.version>4.3.8.RELEASE</spring.version> 
     <spring.batch.version>3.0.7.RELEASE</spring.batch.version> 
    </properties> 

    <dependencies> 

     <!-- Spring Core --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <!-- Spring jdbc, for database --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 


     <!-- Spring Batch dependencies --> 
     <dependency> 
      <groupId>org.springframework.batch</groupId> 
      <artifactId>spring-batch-core</artifactId> 
      <version>${spring.batch.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.batch</groupId> 
      <artifactId>spring-batch-infrastructure</artifactId> 
      <version>${spring.batch.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.microsoft.sqlserver</groupId> 
      <artifactId>mssql-jdbc</artifactId> 
      <version>6.1.0.jre8</version> 
      <exclusions> 
       <exclusion> 
        <groupId>com.microsoft.azure</groupId> 
        <artifactId>azure-keyvault</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

    </dependencies> 

私が間違って何をしているのですか?あなたの名前空間宣言で

+0

あなたのjarファイルの中で、、できます:あなたはspring-batch-3.0.xsdspring-batch.xsdをマッピングするために、この線に沿って何かを必要とするだろうカスタムspring.schemasファイルで

バネバッチ名前空間ハンドラが存在するかどうかを確認しますか? – harshavmb

+0

なぜあなたはSpringブートとJava設定を使用していませんか? –

+0

@MichaelMinella:上の私の例でやっているように、私はループでSpringバッチジョブをどのように動かすことができないのか分かりませんでした。 – Nik

答えて

0

、ちょうど変更:する http://www.springframework.org/schema/batch/spring-batch.xsdを: http://www.springframework.org/schema/batch/spring-batch-3.0.xsd、それが正常に動作する必要があります。

そうでなければ、カスタムspring.schemasファイルをMETA-INFフォルダに焼き付ける必要があります。 `spring.handlers`ファイル内のMETA-INFディレクトリにある

http\://www.springframework.org/schema/batch/spring-batch.xsd=org/springframework/batch/core/configuration/xml/spring-batch-3.0.xsd 
関連する問題