2017-03-01 5 views
3

私は複雑なJavaの春のブートプロジェクトを持っています。その1つのクラスMyClassには、データベースからロードするのに30秒かかる静的属性があります。 MyClass@SpringBootApplicationとして注釈され、アプリケーションが起動されたときの方法Intellij IDEAとSpring Boot:Javaコードの一部のみを再起動する方法は?

@Bean 
public CommandLineRunner demo() {... 

が実行されます。

開発中に、静的属性MyClassを必要とするプロジェクトの他の部分をデバッグ/修正しているとき、これらの30秒を避けたいと思います。

Intellij IDEAのcompiler.automake.allow.when.app.runningレジストリ設定の利益を得て、変更されたクラスがホットスワップによって再度読み込まれるようにしたいと思います。

MyClassは、別のクラスを変更するたびに何度も何度も実行されるのを避けることができますか(それぞれプロジェクト全体が再開されます)。

+0

希望

(それはこれらの機能を再起動カバーセクション20.2を参照してください)hereそれについて読むことができますが、ここでデベロッパーツールについて話していますか? – chrylis

答えて

0

アプリケーションを再起動し、重いクラスは、何度も何度もロードされます望んでいないように見えますが、私は、

私は認めなければならない。このレジストリ設定を認識していませんよ。

ホットスワップを既に使用している場合は、アプリケーションを再起動する必要はありません。コードを変更するだけで、メソッドシグネチャやクラス定義を変更しない限り(つまり、メソッド内の変更は許可されます) - あなたは問題ありません。アプリケーションは再起動されません。

JVMの機能であるSpringまたはIntelliJは、これとは何の関係もありません。

変更後にまだリロード(読み込み、プロセスの再起動)を行い、重い豆を読み込まない場合は、スプリング固有の解決策があります。あなたは、コードを実行するためにそれを本当に必要がありますしない限り、春は、Beanをロードしないように@Lazy

  1. 用途:私はそれらの2を言及します。あなたの説明から、あなたがこのbeanをとにかく必要としないので助けてくれるように思えます。

  2. モック/インメモリの実装を提供し、プロファイルを使用します(春4.xの場合は@条件付き)。環境に応じて実際に豆を積み込むべきアイデアです。 "dev"環境で実行するために、 "軽量"のBeanの実装をロードすることができ、実際のBeanを本番環境にロードすることができます。

・ホープこれはあなたが静的変数に値をロードし、それが静的保管しないで別のクラスを作成します@RefreshScope

の豆を使用した春の方法で同じことを行うことができます

1

に役立ちます。

@Componen 
@RefreshScope 
public class MyClass { 
    private String myRefreshableObject; 

    @PostConstruct 
    public void init() { 
     // set the values of myRefreshableObject 
    } 

    public void getMyRefreshableObject() { 
    return this.myRefreshableObject; 
    } 
} 

、あなたは以下のようにPOSTリクエストアクチュエータエンドポイントrefreshを投げる持つBeanをリロードしたいとき。

curl -d{} http://localhost:8080/refresh 

春ブーツの依存関係がここに古いスレッドをressurrectingため申し訳ありません

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-config</artifactId> 
</dependency> 
+0

このソリューションは一般的には良好ですが、この場合は静的フィールドに役立ちません。 – dunni

+0

スタティックフィールドは使用しないでください。シングルトンBeanです。だから、複数の参照について心配する必要はありません。 – Avinash

1

を必要ですが、それが役立つかもしれないと思った次のとおりです。春のブートは、「デベロッパーツール」と呼ばれるもの含まれています - あなたが置くことができるjarファイルをクラスパス。

開発中に2つのことを行い、プロダクションでは無効になります。その素晴らしい機能の1つは自動再起動です。あなたは、これは、少なくとも、それは、このオプションが存在することを知ってworths、助け:)

関連する問題