Springブートを使用して、Springバッチアプリケーションを作成しました。ローカルシステムでコマンドラインとクラスパスを使用してそのアプリケーションを実行しようとすると、正常に実行されます。ただし、Linuxサーバーで実行しようとすると、次の例外が発生します
Unable to start web server; nested exception is
org.springframework.context.ApplicationContextException:
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
以下は私がそれを実行している方法です:
Java -cp jarFileName.jar; lib\* -Dlogging.level.org.springframework=DEBUG -Dspring.profiles.active=dev -Dspring.batch.job.names=abcBatchJob com.aa.bb.StartSpringBatch > somelogs.log
解決策は次のとおりです。
application.yml
ファイルで以下のプロパティをnone
に明示的に設定しました。
spring:
main:
web-application-type: none
web application type
を無効にします。application.properties
::
spring.main.web-application-type=none
application.yml
を使用する場合は、次を追加します。
spring:
main:
web-application-type: none
*SpringBootServletInitializer*
を拡張します。@SpringBootApplication
public class YourAppliationName extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(YourAppliationName.class, args);
}
}
おそらく、スプリングブートスタータークラスに@SpringBootApplicationがありません。
@SpringBootApplication
public class LoginSecurityAppApplication {
public static void main(String[] args) {
SpringApplication.run(LoginSecurityAppApplication.class, args);
}
}
Spring Bootへの移行中にこの問題が発生しました。 依存関係を削除するアドバイス が見つかりました。そこで、jsp-apiProjectの依存関係を削除しました。また、servlet-api依存関係も同様に削除する必要があります。
compileOnly group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.2'
Pom.xmlのspring-boot-starter-parentを最新バージョンにアップグレードすると、修正されました。
クラスに「public static void main」の注釈を付けます。例:@SpringBootApplication
IDE(IntelliJ)内からではなくfat jarとしてWebアプリケーションを実行しようとすると、この問題が発生しました。
これは私のために働いたものです。デフォルトのプロファイルをapplication.propertiesファイルに追加するだけです。
spring.profiles.active=default
他の特定のプロファイル(dev/test/prod)を既に設定している場合は、デフォルトを使用する必要はありません。ただし、アプリケーションをファットjarとして実行するには、これが必要です。