我是Spring的新手,并开始从这个网站做官方指南: https://spring.io/guides
我想做这个指南: https://spring.io/guides/gs/scheduling-tasks/
我得到以下例外:
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
应用程序启动器类是这样的:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
如您所见,main方法包含一条注释行。我已经完成了一个教程,即这个教程:https://spring.io/guides/gs/consuming-rest/ 它已启动并正在运行。但我无法运行ScheduledTasks应用程序,如下所示:
@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()));
}
}
我使用Eclipse并将Application.java的main作为Application运行。 有人可以帮助我吗?
答案 0 :(得分:61)
计划指南不是一个Web应用程序,所以你可能在REST指南的pom.xml中有一些发霉的东西?如果您严格按照说明操作,它应该可行。您在上面发布的代码的另一个潜在问题是您的@EnableAutoConfiguration
类不在上下文中使用,仅作为主要方法(这可能不是调度指南的问题,但它可能是针对其他一些)。
答案 1 :(得分:47)
@SpringBootApplication
的扫描显示它包含以下注释:
@Configuration
@ComponentScan
@EnableAutoConfiguration
所以你也可以这样做:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
答案 2 :(得分:29)
在你的pom.xml中使用这个:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
或者这个:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
答案 3 :(得分:22)
试试这个
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
答案 4 :(得分:18)
该错误表明您尝试运行的应用程序无法实例化apache tomcat的实例。确保使用tomcat运行应用程序。
如果检查完所有依赖项后遇到同样的问题,请尝试在配置类中添加以下内容
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory =
new TomcatEmbeddedServletContainerFactory();
return factory;
}
如果您正在使用tomcat的外部实例(特别是对于intellij),问题可能是IDE正在尝试启动嵌入式tomcat。在这种情况下,从pom.xml中删除以下内容,然后使用“Edit Configurations”向导配置外部tomcat。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
答案 5 :(得分:18)
我在一个Spring Boot项目中有多个应用程序类,其中包含了Web,并希望避免为其中一个配置Web环境,因此我手动配置如下:
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(false)
.run(args);
}
}
Spring Boot 2及以上版本的更新:
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(WebApplicationType.NONE)
.run(args);
}
}
答案 6 :(得分:11)
添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
答案 7 :(得分:7)
如果您在使用intellij时遇到此异常,并且您尝试使用run
按钮启动该应用程序。尝试从命令行启动应用程序。例如。确保您位于正确的目录(包含您的pom文件的目录)中,假设这是一个springboot
应用程序运行mvn spring-boot:run
这对我来说就是这个诀窍。
此外,我还看到当您的spring应用程序依赖于另一个应用程序时会发生此错误。在这种情况下,我必须首先启动另一个应用程序然后运行。
答案 8 :(得分:5)
添加注释@SpringBootApplication
在入门类之前为我解决了这个问题(所以实际上,这个错误信息可能意味着“你没有任何地方有@SpringBootApplication
标记的类,至少你需要一个)
@SpringBootApplication
public class AppStarter {
public static void main(String[] args) {
SpringApplication.run(AppStarter.class, args);
}
}
答案 9 :(得分:4)
当main方法与传递给SpringApplcation.run()的类不同时,我遇到了类似的问题
所以解决方案是使用你已注释掉的那一行:
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
答案 10 :(得分:3)
如果您将其打包为单个jar并且它是非Web应用程序,请尝试加载应用程序上下文,如下所示。
@SpringBootApplication
ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class);
或者使用下面的插件将其打包为单个jar
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
您可以使用以下命令运行
来指定外部配置java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
请注意,如果您将属性作为参数传递,则不包括@PropertySource("classpath:test.properties")
它将覆盖参数
答案 11 :(得分:2)
如果使用命令行gradle bootRun
成功运行它,同时使用命令行gradle jar
将其打包到jar文件,以便使用命令行java -jar build/libs/demo.jar
运行它,不幸的是,它失败了例外:Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
,在这种情况下,您需要使用gradle插件bootRepackage
的任务spring-boot
来生成特殊的可运行jar。
$ gradle clean bootRepackage
$ java -jar build / libs / demo.jar
答案 12 :(得分:2)
SpringApplication
会尝试代表您创建正确的ApplicationContext
类型。默认情况下,将使用AnnotationConfigApplicationContext
或AnnotationConfigEmbeddedWebApplicationContext
,具体取决于您是否正在开发Web应用程序。
用于确定“网络环境”的算法相当简单(基于几个类的存在)。如果您需要覆盖默认值,可以使用setWebEnvironment(boolean webEnvironment)
。
也可以通过调用ApplicationContext
来完全控制将使用的setApplicationContextClass(…)
类型。
[提示]
在JUnit测试中使用setWebEnvironment(false)
时,通常需要调用SpringApplication
。
答案 13 :(得分:2)
添加spring boot starter依赖项修复了我的错误。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果要将tomcat作为嵌入式服务器启动,则必须执行此操作。
答案 14 :(得分:2)
检查你的pom.xml是否存在
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
我有这样的问题;因为缺乏这种依赖性
答案 15 :(得分:1)
在我的情况下,新添加了@Profile注释,以便忽略生产模式下的TestApplication类和测试模式下的Application类。
不幸的是,我们忘记将以下行添加到application.properties文件中:
spring.profiles.active=test
or
spring.profiles.active=production
如果没有这些配置,则没有加载配置文件,这导致了不那么多的说Spring Error。
答案 16 :(得分:1)
清除存储库是一种可能的解决方案。
Windows - &gt;删除maven存储库中的所有子文件夹:
C:\用户\ YourUserName.m2 \存储库
答案 17 :(得分:1)
这堂课的问题:
var foo = new bar[]();
var foo = new bar[];
启动应用程序的正确方法是:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
//SpringApplication.run(Application.class, args);
SpringApplication.run(ScheduledTasks.class, args);
}
}
答案 18 :(得分:1)
这应该是由依赖性问题引起的,一般来说,你需要检查依赖性。
答案 19 :(得分:0)
问题是驱动程序tomcat的排除,我试过排除它并使用vert.x,所以当我整合机智的Spring Admin时,启动了问题
<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>
答案 20 :(得分:0)
我在以下情况下遇到此例外。
我的POM中的是属性:
<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>
我的应用程序类(“start-class”)的名称和路径是错误的。
答案 21 :(得分:0)
我遇到了同样的问题。因为我没有使用Maven在Spring-Boot中定义Main.class和以下注释:
@SpringBootApplication
public class Main {
public static void main(String args[]){
SpringApplication.run(Main.class, args);
}
}
答案 22 :(得分:0)
我有一个类似的问题,问题是一个破碎的maven repo jar文件。在我的例子中,tomcat-embed-core
jar文件被破坏了。所以我将它从maven repo中删除并刷新以便再次下载。
答案 23 :(得分:0)
在我的情况下,它是在使用以下代码从pom
中排除资源文件夹后发生的。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*/*.properties</exclude>
</excludes>
</resource>
</resources>
评论此代码启动了我的代码。
答案 24 :(得分:0)
此问题的另一个原因是Maven存储库jar损坏,因此您可以使用以下命令来解决该问题:
mvn dependency:purge-local-repository
答案 25 :(得分:0)
可能是您的spring boot启动程序类中缺少 @SpringBootApplication 。
var oDialog = oList.getParent();
var oBar = oDialog.getContent()[0].getTitle().getText();
答案 26 :(得分:0)
我正在使用gradle,当我有commandLineRunner使用kafka主题和用于接收传入钩子的运行状况检查端点时,遇到了似乎存在的问题。我花了12个小时来弄清楚,终于发现我将mybatis-spring-boot-starter与spring-boot-starter-web一起使用,它们存在一些冲突。后来我直接介绍了mybatis-spring,mybatis和spring-jdbc,而不是mybatis-spring-boot-starter,该程序运行良好。
希望这会有所帮助
答案 27 :(得分:0)
就我而言,弹簧配置未按预期加载。使用以下命令从 cmd 运行时,它起作用了:
start java -Xms512m -Xmx1024m <and the usual parameters as needed, like PrintGC etc> -Dspring.config.location=<propertiesfiles> -jar <jar>