私は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のメインをアプリケーションとして実行します。誰かが私を助けてもらえますか?
スケジューリングガイドはWebアプリケーションではないので、RESTガイドのpom.xmlにはかっこいいものがあるでしょうか。指示に厳密に従うならば、それはうまくいくはずです。あなたが上で投稿したコードに関するもう一つの潜在的な問題はあなたの@EnableAutoConfiguration
クラスがメインメソッドとしてだけコンテキストで使用されないということです(これはスケジューリングガイドにとって問題ではないかもしれませんが、それはたぶん他のもののためです)。
@SpringBootApplication
をスキャンすると、次のアノテーションが含まれていることがわかります。
@Configuration
@ComponentScan
@EnableAutoConfiguration
だからあなたもこれを行うことができます:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
あなたの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>
これを試して
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(ScheduledTasks.class, args);
}
}
このエラーは、実行しようとしているアプリケーションがApache Tomcatのインスタンスをインスタンス化できないことを示唆しています。 Tomcatでアプリケーションを実行していることを確認してください。
すべての依存関係を調べた後に同じ問題が発生した場合は、構成クラスに次の行を追加してください。
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory =
new TomcatEmbeddedServletContainerFactory();
return factory;
}
Tomcatの外部インスタンスを使用している場合(特にintellijの場合)、問題はIDEが組み込みTomcatを起動しようとしていることです。この場合、pom.xmlから以下を削除してから、「構成の編集」ウィザードを使用して外部Tomcatを構成します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
1つのSpring Bootプロジェクトに複数のアプリケーションクラスが含まれていて、その中にWebが含まれていて、そのうちの1つに対してWeb環境を構成しないようにしたいので、手動で以下のように構成しました。
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(false)
.run(args);
}
}
_ update _ Spring Boot 2以降の場合:
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
new SpringApplicationBuilder(Application.class)
.web(WebApplicationType.NONE)
.run(args);
}
}
追加する
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
intellijの使用中にこの例外が発生し、アプリケーションをrun
ボタンで起動しようとしている場合。代わりにコマンドラインからアプリケーションを起動してみてください。例えば。これがspringboot
アプリケーションの実行mvn spring-boot:run
であると仮定して、正しいディレクトリ(pomファイルのあるディレクトリ)にいることを確認してください。
加えて、私はあなたのSpringアプリケーションが他のアプリケーションに依存しているときにもこのエラーが発生するのを見ました。この場合、最初に他のアプリケーションを起動してから実行する必要がありました。
アノテーション@SpringBootApplication
を追加するスタータークラスが私のためにこの問題を解決する前に(つまり本質的に、このエラーメッセージは "あなたはどこにも@SpringBootApplication
とマークされたクラスを持っていません。
@SpringBootApplication
public class AppStarter {
public static void main(String[] args) {
SpringApplication.run(AppStarter.class, args);
}
}
メインメソッドがSpringApplcation.run()に渡されたものとは異なるクラスにあるとき、私は同様の問題を抱えていました
だから解決策はあなたがコメントアウトした行を使うことでしょう:
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
あなたがそれを単一のjarとしてパッケージ化していて、それが非ウェブアプリであるならば、以下のようにアプリコンテキストをロードすることを試みなさい。
@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")
を含めないでください。これはパラメータをオーバーライドします。
pom.xmlが存在することを確認してください
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
私はこのような問題を抱えていた;この依存性が足りないため
SpringApplication
はあなたに代わって正しいタイプのApplicationContext
を作成しようとします。デフォルトでは、Webアプリケーションを開発しているかどうかに応じて、AnnotationConfigApplicationContext
またはAnnotationConfigEmbeddedWebApplicationContext
が使用されます。
「Web環境」を決定するために使用されるアルゴリズムはかなり単純化されています(いくつかのクラスの存在に基づく)。デフォルトを上書きする必要がある場合はsetWebEnvironment(boolean webEnvironment)
を使用できます。
setApplicationContextClass(…)
を呼び出して使用されるApplicationContext
型を完全に制御することも可能です。
[ティップ] JUnitテストの中でSpringApplication
を使うときはsetWebEnvironment(false)
を呼ぶのが望ましいことがよくあります。
コマンドラインgradle bootRun
で実行するためにコマンドラインgradle jar
でjarファイルにパッケージ化しながら、コマンドラインJava -jar build/libs/demo.jar
を使用して正常に実行した場合、残念ながら、例外:Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
で失敗します。この場合は、タスクbootRepackage
/を使用する必要があります。プラグインspring-boot
をグラドル化して、特別な実行可能jarを生成します。
$ gradle clean bootRepackage
$ Java -jar build/libs/demo.jar
Spring Bootスターターの依存関係を追加することで私のエラーが修正されました。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Tomcatを埋め込みサーバーとして起動したい場合、これは必須です。
私の場合は、プロダクションモードのTestApplicationクラスとテストモードのApplicationクラスを無視するために、@Profileアノテーションを新たに追加しましたとしています。
残念ながら、application.propertiesファイルに次の行を追加するのを忘れていました。
spring.profiles.active=test
or
spring.profiles.active=production
これらの設定がなければ、プロファイルはロードされず、それほど意味のないSpringエラーが発生しました。
これは依存関係の問題が原因で発生します。一般に、依存関係を確認する必要があります。
明確なリポジトリ は解決策の1つです。
Windows - > Mavenリポジトリ内のすべてのサブフォルダを削除します。
C:\ Users\YourUserName.m2\repository
問題はこのクラスにあります:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
//SpringApplication.run(Application.class, args);
SpringApplication.run(ScheduledTasks.class, args);
}
}
アプリケーションを起動する正しい方法は次のとおりです。
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
私の場合は、次のコードを使用してpom
からリソースフォルダーを除外した後に発生します。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>*/*.properties</exclude>
</excludes>
</resource>
</resources>
このコードにコメントすると私のコードが始まりました。
問題はスターター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>
おそらくあなたのスプリングブートスタータークラスに @SpringBootApplication がありません。
@SpringBootApplication
public class LoginSecurityAppApplication {
public static void main(String[] args) {
SpringApplication.run(LoginSecurityAppApplication.class, args);
}
}
次の状況でこの例外が発生しました。
私の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")が間違っていました。
私は同様の問題を抱えていて、問題は壊れたmavenリポジトリのjarファイルでした。私の場合、Tomcat-embed-core
jarファイルは壊れていました。そこで私はそれをMavenリポジトリから削除し、再度ダウンロードできるように更新しました。
この問題の他の原因は、Mavenリポジトリjarの破損であるため、問題を解決するために次のコマンドを使用できます。
mvn dependency:purge-local-repository
私は同じ問題で立ち往生しています。 Mavenを使ってSpring-BootでMain.classと次のアノテーションを定義しなかったので:
@SpringBootApplication
public class Main {
public static void main(String args[]){
SpringApplication.run(Main.class, args);
}
}