Botte de printemps
J'essayais d'exécuter mon application de démarrage Spring dans intelliJ, mais j'ai eu une erreur:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.3.1.RELEASE)
2016-01-26 23:09:30.883 INFO 3960 --- [ main] com.example.he.ExampleApplication : Starting ExampleApplication on user with PID 3960 (F:\WORK\Work_Project\Example_Application-master\Example_Application-master\build\classes\main started by user in F:\WORK\Work_Project\Example_Application-master\Example_Application-master)
2016-01-26 23:09:30.892 INFO 3960 --- [ main] com.example.he.ExampleApplication : No active profile set, falling back to default profiles: default
2016-01-26 23:09:31.042 INFO 3960 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@73d4cc9e: startup date [Tue Jan 26 23:09:31 IST 2016]; root of context hierarchy
2016-01-26 23:09:31.242 WARN 3960 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
2016-01-26 23:09:31.453 ERROR 3960 --- [ main] o.s.boot.SpringApplication : Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.Java:133) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:532) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:118) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:764) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.doRun(SpringApplication.Java:357) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:305) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1124) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1113) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at com.example.he.ExampleApplication.main(ExampleApplication.Java:15) [main/:na]
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25]
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62) ~[na:1.8.0_25]
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43) ~[na:1.8.0_25]
at Java.lang.reflect.Method.invoke(Method.Java:483) ~[na:1.8.0_25]
at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:134) [idea_rt.jar:na]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.Java:185) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:158) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.Java:130) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
... 13 common frames omitted
2016-01-26 23:09:31.456 INFO 3960 ---
Process finished with exit code 1
J'utilise Gradle. Voici mon fichier build.gradle:
buildscript {
ext {
springBootVersion = '1.3.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'Java'
apply plugin: 'Eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'
war {
baseName = 'Example-Application'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.Apache.Tomcat.embed:Tomcat-embed-jasper:8.0.30')
compile('javax.servlet:servlet-api:2.5')
compile('javax.servlet:jstl:1.2')
runtime('mysql:mysql-connector-Java')
providedRuntime 'org.springframework.boot:spring-boot-starter-Tomcat'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Eclipse {
classpath {
containers.remove('org.Eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.Eclipse.jdt.launching.JRE_CONTAINER/org.Eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.9'
}
C'est la classe de configuration:
package com.example.he.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/city").setViewName("city");
registry.addViewController("/").setViewName("city");
registry.addViewController("/userAdd").setViewName("user");
registry.addViewController("/created").setViewName("created");
registry.addViewController("/createblog").setViewName("blog");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/home").setViewName("home");
}
}
Et voici ma classe d'application:
package com.example.he;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
public class ExampleApplication extends SpringBootServletInitializer{
public static void main(String[] args) throws Exception {
SpringApplication.run(ExampleApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ExampleApplication.class);
}
}
et j'ai aussi essayé ces annotations.
@ComponentScan
@EnableAutoConfiguration
@Configuration
Je suis nouveau au printemps et je ne comprends pas vraiment ce que font ces annotations. J'ai essayé de suivre certaines d'entre elles mais je n'ai pas pu résoudre le problème.
J'ai essayé de construire l'application à l'aide de la console (gradle build), la construction a réussi, mais l'exécution de la commande war me donne une erreur: Impossible de démarrer Tomcat intégré. Quelqu'un pourrait-il m'aider s'il vous plaît?
J'ai pu mettre votre application en service. La seule modification que j'ai apportée pour l'exécuter consistait à commenter quelques-unes de vos dépendances dans votre fichier build.gradle.
Dans le bloc des dépendances ci-dessous, 3 lignes sont commentées. J'ai commenté la ligne spring-boot-start-jpa parce que je n'avais pas de source de données configurée.
Cependant, si vous ne commentez que les dépendances servlet-api et jstl, votre application devrait démarrer sans problème, c'est ce qui m'est arrivé.
dependencies {
//compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.Apache.Tomcat.embed:Tomcat-embed-jasper:8.0.30')
//compile('javax.servlet:servlet-api:2.5')
//compile('javax.servlet:jstl:1.2')
runtime('mysql:mysql-connector-Java')
providedRuntime 'org.springframework.boot:spring-boot-starter-Tomcat'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
J'ai aussi cette erreur et cela ne se produit qu'avec Intellij. Enfin, je l'ai fait en commentant ceci:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
Il m'a fallu beaucoup de temps pour comprendre cela. J'espère que cela aide ceux qui rencontrent la même erreur.
Dans mon cas, j'ai oublié d'ajouter ceci dans pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
L'ajout d'annotations sur la classe d'application de démarrage principale a fonctionné pour moi . @ EnableAutoConfiguration Public class ExampleApplication {.....
Nettoyer le C:\Users\Lenovo\.m2\repository
puis réimporter toutes les dépendances maven a fonctionné pour moi. J'ai également supprimé toutes les dépendances de substitution de mon pom.xml.