Je suis totalement nouveau au printemps et a commencé à faire les guides officiels de ce site: https://spring.io/guides
Je souhaite faire ce guide: https://spring.io/guides/gs/scheduling-tasks/
J'obtiens l'exception suivante:
2014-02-14 16:25:21.614 INFO 9032 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.scheduling.annotation.SchedulingConfiguration' of type [class org.springframework.scheduling.annotation.SchedulingConfiguration$$EnhancerByCGLIB$$5b48d763] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2014-02-14 16:25:21.638 INFO 9032 --- [ main] .c.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/C:/work/Spring/SpringTutorial/target/classes/, file:/C:/work/Apache-maven-3.0.3/repo/javax/servlet/javax.servlet-api/3.0.1/javax.servlet-api-3.0.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter/1.0.0.RC1/spring-boot-starter-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot/1.0.0.RC1/spring-boot-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-context/4.0.0.RELEASE/spring-context-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-autoconfigure/1.0.0.RC1/spring-boot-autoconfigure-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-logging/1.0.0.RC1/spring-boot-starter-logging-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/jul-to-slf4j/1.7.5/jul-to-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/log4j-over-slf4j/1.7.5/log4j-over-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar, file:/C:/work/Apache-maven-3.0.3/repo/ch/qos/logback/logback-core/1.0.13/logback-core-1.0.13.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-web/1.0.0.RC1/spring-boot-starter-web-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-Tomcat/1.0.0.RC1/spring-boot-starter-Tomcat-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/Apache/Tomcat/embed/Tomcat-embed-core/7.0.47/Tomcat-embed-core-7.0.47.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/Apache/Tomcat/embed/Tomcat-embed-logging-juli/7.0.47/Tomcat-embed-logging-juli-7.0.47.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-web/4.0.0.RELEASE/spring-web-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-aop/4.0.0.RELEASE/spring-aop-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-beans/4.0.0.RELEASE/spring-beans-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-webmvc/4.0.0.RELEASE/spring-webmvc-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-expression/4.0.0.RELEASE/spring-expression-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-databind/2.3.1/jackson-databind-2.3.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/commons-lang/commons-lang/2.2/commons-lang-2.2.jar]
Exception in thread "main" 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:140)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:476)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:124)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:658)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:355)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:920)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:909)
at hu.kumite.Application.main(Application.Java:17)
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:190)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:163)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.Java:137)
... 7 more
La classe de démarrage de l'application est la suivante:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
Comme vous pouvez le constater, la méthode principale contient une ligne commentée. J'ai déjà fait un tutoriel, à savoir celui-ci: https://spring.io/guides/gs/consuming-rest/ Il est opérationnel. Mais je ne peux pas exécuter l'application ScheduledTasks, qui est la suivante:
@EnableScheduling
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("The time is now " + dateFormat.format(new Date()));
}
}
J'utilise Eclipse et exécute le programme principal Application.Java en tant qu'application . Quelqu'un pourrait-il m'aider, s'il vous plaît?
Le guide de planification n'est pas une application Web, vous avez donc probablement des traces de moisissure dans votre pom.xml du guide REST? Si vous suivez les instructions à la lettre, cela devrait marcher. Un autre problème potentiel avec le code que vous avez posté ci-dessus est que votre classe @EnableAutoConfiguration
n'est pas utilisée dans le contexte mais uniquement en tant que méthode principale (ce qui peut ne pas poser de problème pour le guide de planification, mais probablement pour un tas d'autres).
Un scan du @SpringBootApplication
montre qu'il comprend les annotations suivantes:
@Configuration
@ComponentScan
@EnableAutoConfiguration
Pour que vous puissiez faire cela aussi:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
utilisez celui-ci dans votre pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
ou celui-ci:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
Essaye ça
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
L'erreur suggère que l'application que vous essayez d'exécuter ne peut pas instancier une instance d'Apache Tomcat. Assurez-vous que vous exécutez l'application avec Tomcat.
si, après avoir vérifié toutes vos dépendances, vous rencontrez le même problème, essayez d’ajouter ce qui suit dans votre classe de configuration.
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory =
new TomcatEmbeddedServletContainerFactory();
return factory;
}
Si vous utilisez une instance externe de Tomcat (en particulier pour intellij), le problème peut être lié au fait que IDE tente de démarrer Tomcat intégré. Dans ce cas, supprimez les éléments suivants de votre fichier pom.xml, puis configurez le Tomcat externe à l’aide de l’expert "Modifier les configurations".
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
J'avais plusieurs classes d'applications dans un projet Spring Boot qui incluaient le Web et qui voulaient éviter de configurer un environnement Web pour l'une d'entre elles; je l'ai donc configuré manuellement comme suit:
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(false)
.run(args);
}
}
UPDATEpour Spring Boot 2 et versions ultérieures:
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(WebApplicationType.NONE)
.run(args);
}
}
Ajouter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
si vous rencontrez cette exception en utilisant intellij et que vous essayez de démarrer l’application avec le bouton run
. Essayez de démarrer l'application à partir de la ligne de commande. Par exemple. assurez-vous que vous êtes dans le bon répertoire (répertoire avec votre fichier pom) en supposant qu'il s'agit d'une application springboot
exécutée mvn spring-boot:run
c'est ce qui a été le cas.
De plus, j'ai également vu cette erreur se produire lorsque votre application Spring dépend d'une autre application. Dans ce cas, je devais d'abord lancer l'autre application, puis l'exécuter.
Ajout de l'annotation @SpringBootApplication
Avant que la classe de base ne règle ce problème pour moi (ce message d'erreur peut donc signifier "vous n'avez pas de classe marquée @SpringBootApplication
, vous devez en avoir au moins un)
@SpringBootApplication
public class AppStarter {
public static void main(String[] args) {
SpringApplication.run(AppStarter.class, args);
}
}
J'ai eu des problèmes similaires lorsque la méthode principale utilise une classe différente de celle transmise à SpringApplcation.run ()
La solution serait donc d'utiliser la ligne que vous avez commentée:
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Si vous le conditionnez comme un seul fichier jar et que ce n'est pas une application Web, essayez de charger le contexte de l'application comme indiqué ci-dessous.
@SpringBootApplication
ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class);
Ou utilisez le plugin ci-dessous pour créer un package unique
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
vous pouvez spécifier les configs externes en utilisant la commande ci-dessous pour exécuter
Java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Notez que si vous transmettez les propriétés en tant qu'arguments, n'incluez pas @PropertySource("classpath:test.properties")
, les paramètres seront alors remplacés.
vérifier votre pom.xml est existe
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
J'ai eu un problème comme celui-ci ; Sans cette dépendance
SpringApplication
tentera de créer le bon type de ApplicationContext
en votre nom. Par défaut, AnnotationConfigApplicationContext
ou AnnotationConfigEmbeddedWebApplicationContext
sera utilisé, selon que vous développiez une application Web ou non.
L’algorithme utilisé pour déterminer un ‘environnement Web’ est assez simpliste (basé sur la présence de quelques classes). Vous pouvez utiliser setWebEnvironment(boolean webEnvironment)
si vous devez remplacer la valeur par défaut.
Il est également possible de prendre le contrôle complet du type ApplicationContext
qui sera utilisé en appelant setApplicationContextClass(…)
.
[Astuce] Il est souvent souhaitable d'appeler setWebEnvironment(false)
lors de l'utilisation de SpringApplication
dans un test JUnit.
Si vous l'exécutez avec succès à l'aide de la ligne de commande gradle bootRun
, alors que vous le compressez avec la ligne de commande gradle jar
dans le fichier jar afin de l'exécuter avec la ligne de commande Java -jar build/libs/demo.jar
, il a malheureusement échoué avec Exception: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
. Dans ce cas, vous devez utiliser la tâche bootRepackage
de gradle plugin spring-boot
pour générer un fichier jar exécutable spécial.
$ gradle clean bootRepackage
$ Java -jar build/libs/demo.jar
L'ajout de la dépendance du démarreur de démarrage à ressort a corrigé mon erreur.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Cela est nécessaire si vous souhaitez démarrer Tomcat en tant que serveur intégré.
Dans mon cas, nous avons récemment ajouté l'annotation @Profile} afin d'ignorer la classe TestApplication en mode production et la classe Application en mode test.
Malheureusement, nous avons oublié d'ajouter la ligne suivante dans les fichiers application.properties:
spring.profiles.active=test
or
spring.profiles.active=production
Sans cette configuration, aucun profil n’a été chargé, ce qui a provoqué l’énoncé Spring Error.
Cela devrait être dû à un problème de dépendance. En général, vous devez vérifier la dépendance.
Clear repository est une solution possible.
Windows -> supprimer tous les sous-dossiers du référentiel maven:
C:\Users\YourUserName.m2\repository
Le problème c'est dans cette classe:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
//SpringApplication.run(Application.class, args);
SpringApplication.run(ScheduledTasks.class, args);
}
}
La manière correcte de lancer votre application est la suivante:
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Dans mon cas, cela se produit après avoir exclu le dossier de ressources de la pom
à l'aide du code suivant.
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*/*.properties</exclude>
</excludes>
</resource>
</resources>
Commenter ce code a commencé mon code.
Le problème est l’exclusion du démarreur Tomcat, j’ai essayé de l’exclure et d’utiliser vert.x; ainsi, lorsque j’intègre wit Spring Admin, des problèmes ont commencé
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Vous avez probablement perdu @SpringBootApplication dans votre classe de démarrage de démarrage de printemps.
@SpringBootApplication
public class LoginSecurityAppApplication {
public static void main(String[] args) {
SpringApplication.run(LoginSecurityAppApplication.class, args);
}
}
J'ai eu cette exception dans la situation suivante.
dans mon POM était propriétés:
<properties>
<Java.version>1.8</Java.version>
<!-- The main class to start by executing Java -jar -->
<start-class>com.scmaer.Java.microservice.Application</start-class>
<cxf.version>3.1.5</cxf.version>
<olingo.version>2.0.10</olingo.version>
<spring.boot.version>1.4.7.RELEASE</spring.boot.version>
<spring.boot.plugin.version>1.5.8.RELEASE</spring.boot.plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<skipTests>false</skipTests>
</properties>
et le nom et le chemin de ma classe d'application ("start-class") étaient faux.
J'ai eu un problème similaire et le problème était un fichier jar repo maven cassé. Dans mon cas, le fichier jar Tomcat-embed-core
était cassé. Je l'ai donc retiré du dépôt Maven et l'ai actualisé pour le télécharger à nouveau.
Une autre cause de ce problème est la corruption des fichiers jar du référentiel maven. Vous pouvez donc utiliser la commande suivante pour résoudre le problème:
mvn dependency:purge-local-repository
J'ai collé avec le même problème. Comme je n'ai pas défini Main.class et les annotations suivantes dans Spring-Boot avec Maven:
@SpringBootApplication
public class Main {
public static void main(String args[]){
SpringApplication.run(Main.class, args);
}
}