2016-12-06 2 views
0

J'ai développé un programme de traitement par lots en utilisant Spring Boot 1.4.2, qui prend beaucoup de temps (environ 5 heures) à s'exécuter. Après environ 5 heures passe depuis que le programme est lancé, il termine l'exécution avec un message d'erreur ci-dessous:

20:49:01.324 ERROR o.s.boot.SpringApplication - Application startup failed 
java.lang.NoClassDefFoundError: org/springframework/util/StopWatch$TaskInfo 
    at org.springframework.util.StopWatch.stop(StopWatch.java:146) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) 
    at com.example.Main.main(Main.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58) 
Caused by: java.lang.ClassNotFoundException: org.springframework.util.StopWatch$TaskInfo 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 13 common frames omitted 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58) 
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/SpringBootExceptionHandler 
    at org.springframework.boot.SpringApplication.getSpringBootExceptionHandler(SpringApplication.java:903) 
    at org.springframework.boot.SpringApplication.registerLoggedException(SpringApplication.java:850) 
    at org.springframework.boot.SpringApplication.reportFailure(SpringApplication.java:840) 
    at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:816) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) 
    at jp.co.cyberagent.leeds.article_batches.ArticleBatchesApplication.main(ArticleBatchesApplication.java:25) 
    ... 8 more 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringBootExceptionHandler 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 16 more 

Il semble que je manque quelques dépendances sur Spring Framework, mais je ne sais pas ce que j'ai vraiment besoin.

Voici mon build.gradle.

buildscript { 
    ext { 
     springBootVersion = '1.4.2.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'org.springframework.boot' 

jar { 
    baseName = 'article-batches' 
} 
sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
    maven { 
     url "https://maven.ca-tools.org/content/groups/public/" 
    } 
} 


dependencies { 
    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1') 
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7' 
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40' 
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2' 
    compile group: 'org.mybatis', name: 'mybatis-typehandlers-jsr310', version: '1.0.1' 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

Répondre

0

J'ai résolu le problème par moi-même. Mon processus principal a été écrit dans la méthode CommandLineRunner#run, mais il est faux d'écrire le processus principal dans la méthode run comme le dit this comment dans une autre question.

J'ai suivi le commentaire et écrit mon processus principal comme ci-dessous, puis le problème a disparu.

@SpringBootApplication 
public class Main { 

    public static void main(String[] args) { 
     final ConfigurableApplicationContext context = SpringApplication.run(Main.class, args); 
     final AppBean app = context.getBean(AppBean.class); 
     app.run(args); 
    } 
} 
0

S'il vous plaît changer le Boot Spring 1.4.2-1.4.1.

Il semble que cette nouvelle version a quelques problèmes.

+0

Merci d'avoir répondu, mais malheureusement cela n'a pas fonctionné ... – umainyosu