2016-10-18 16 views
0

私はアプリケーションを開発し、クラウドファウンドリに展開しています。内部的には、私たちのチームによって開発された3つのカスタム依存関係があります。スプリングブートを使用して非実行ライブラリ(jar)を作成するにはどうすればよいですか?

3つの依存関係はすべてブートプロジェクトであり、いずれも@Configurationです。

  • 依存関係1は、Couchbaseと対話することです。この依存関係の原因はブートプロジェクトです。
  • 依存関係2は、ログのためにFluentDと対話することです。この依存関係の原因はブートプロジェクトです。
  • 依存関係3は外部レストサービスと対話することです。この依存関係の原因はブートプロジェクトです。
  • 依存関係4は、上記の3つの依存関係をすべて持ち、utilとクラスと定数もほとんどありません。

私はこの依存関係4をWebMVCの実装を持つ複数のWebアプリケーションで使用しています。

ローカルマシンですべて正常に動作しています。しかし、私はクラウド上でこのWebアプリケーションをプッシュしているときに、ライブラリが断続的に私のアプリケーションをクラッシュさせているWebアプリケーションの前に実行されることがあります。良いことアプリは数秒で回復しています。

私は自分のライブラリ(jars/dependencies)以下で変更を加え、クラウドで試しました。これらの変更を行った後、アプリのクラッシュの割合は減少しますが、残念ながら時々クラッシュすることがあり、アプリケーションの前に依存関係が実行されることがあります。ライブラリのbuild.gradleで

  • 追加bootRepackage.enabled = falseをbootRepackage.withJarTask =瓶
  • は、ライブラリから離陸し、私のWebアプリケーション springBoot { mainClass = "com.java.Application" 実行ファイルに追加します= true }
  • ライブラリ(依存関係/ jars)から@SpringBootApplicationを取り出しました。それは今、私のWebアプリケーションの中だけです。

これは、ブート依存関係を実行不能にする唯一の手順ではないか、私は他の何かをしなければならないでしょう。私が何かを見逃している場合は、私に知らせてください。

私の依存関係のサンプルアプリケーションクラスです。

import org.springframework.context.annotation.ComponentScan; 

    @ComponentScan 
    public class LoggingApplication { 

    } 

Sample of Web application main class. 
    @SpringBootApplication 
    @EnableWebMvc 
    @Import(LoggingApplication.class) 
    public class Application { 


    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
    } 
+1

「ウェブアプリケーションの前にライブラリが実行されることがあります」とはどういう意味ですか?ライブラリは実際に何かを実行することは想定されていません。 –

+0

そして、正直言って、彼らが本格的なアプリケーションではない内部の依存関係ならば、なぜあなたはSpring Bootを使用していますか?通常のSpring Frameworkで十分です。 – rorschach

答えて

0

あなたはstacktraceを公開しておらず、「クラッシュ」の詳細も示していません。だから私のクリスタルボールを見て、これはあなたがSpring IoCコンテナの配線段階中に何らかの作業をしているように思えます。この "仕事"は@PostConstructハンドラに移動する必要があります。そのため、Spring Contextが完全に作成されて初期化された後に実行されることが確実です。

関連する問題