web-dev-qa-db-ja.com

Spring Bootのホットスワップ

私はSpring BootでP.O.Cをやっています。

これまでのところ、非常に良好で有望ですが、1つの大きな欠点があります。組み込みサーバーを使用している(つまり、Webアプリを.jar)。したがって、開発時には、CSS、HTML、またはJSファイルを変更するたびに、jarを再構築してサーバーを再起動する必要があります。ホットスワップはありません。これにより、UI開発が本当に遅くなります。

別のドメインから静的リソースをロードしてローカルnginxから提供するなど、いくつかの簡単な修正や、このようないくつかのバリエーションを考えることができますが、何らかの組み込みオプションはありませんIntelliJ/Eclipseを使用する場合

38
Amnon

いくつかのオプションがあります。 IDE(特にデバッグをオンにした状態))で実行することは、開発を行うための良い方法です(すべての最新のIDEでは、静的リソースの再読み込みと、通常Java Spring Boot devtoolsは、大幅に向上させるための安価な方法です(クラスパスに追加するだけです)。変更が検出されたときに、ホットJVMでアプリケーションを再起動することにより動作します。より高いレベルのツールを使用してコードを記述している場合は、外部のcss/jsコンパイラプロセスで使用できます。

Spring Loaded は推奨されなくなりましたが、おそらくまだ使用中です。遅延ゼロのホットスワップが必要な場合(JRebelなど)、より洗練されたエージェントベースのツールは非常によく機能します。

最新のコンテンツについては docs をご覧ください

23
Dave Syer

ホットスワップを取得できます:

  • for Java code:using spring-loaded
  • thymeleafテンプレートの場合:キャッシュの無効化

詳細を確認するには、この投稿を確認してください: http://blog.netgloo.com/2014/05/21/hot-swapping-in-spring-boot-with-Eclipse-sts/

7
Fred K

この種のサポートがどこまで進んでいるかはわかりませんが、Eclipse IDE(またはこれを読んでいる人)を使用する場合:デバッグでm2eを介してSpring-Bootアプリケーションを起動します) -mode([デバッグ]ドロップダウンボタンを押して、Maven実行構成アイテムを選択します)。

それは私にとって魅力のように機能します。

私のMaven実行構成アイテムは次のように構成されています。

  • 目標は「spring-boot:run」に設定されます
  • ベースディレクトリはプロジェクトディレクトリです

私は使用しないさらなるライブラリ(spring-boot-devtoolsでさえない)です。

それでおしまい。

6
Igor

しかし、IntelliJ/Eclipseを使用する場合、何らかの組み込みオプションはありませんか?

IntelliJ 15.0、Windows 10で私を助けたのは、次のシーケンスでした。

STEP 1:@jonashacktで述べたように、pomに次の依存関係を追加しました(これはどこでも言及されていますが、これだけで解決します)

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
</dependency>

STEP 2:次に、File-> Settings-> Build-Execution-Deployment-> Compilerから(メインコンパイラオプションが選択されており、サブオプション)

プロジェクトの自動作成を有効にします。 [OK]をクリックしてダイアログを閉じます

STEP 3:ホールド Shift+Ctrl+A (Windowsの場合)「Enter action or option name」というタイトルの検索ダイアログが表示され、レジストリを入力します。 「レジストリ」という最初のオプションをダブルクリックすると、別のウィンドウが開きます。次のオプションを探します。

compiler.automake.allow.when.app.running

有効にして、閉じるをクリックします

ステップ4:IDEを再起動

これから詳しく説明します source

6
shabby

Intellijでは、この動作を取得できます。プログラムがデバッグモードで実行されている場合は、Run > Reload Changed Classes

注:Intellijがアクションを完了すると、Loaded classes are up to date. Nothing to reload。これは実際にはDIDクラスパスリソースをリロードするため、誤解を招く可能性があります。

私の環境/セットアップには以下が含まれます:
Intellij 13
埋め込みTomcat
タイプ 'Application'の実行/デバッグ構成(メインクラスのみを使用)
静的なhtml、css、jsの提供(jspなし)

5
dgtc

Gradleを使用していると仮定します。 build.gradleで次の構成を使用します

_apply plugin: 'Java'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'application'

applicationDefaultJvmArgs = ["-agentlib:jdwp=transport=dt_socket,address=localhost:7000,server=y,suspend=n"]

mainClassName = "package.ApplicationRunner"
_

コマンド_gradle build run_を使用して、IDEまたはコマンドラインからアプリケーションを実行します

これで、IDEは、スプリングブートアプリケーションが実行されるリモートJVM(ポート7000上)に接続できます。また、静的ファイルのホットデプロイメントもサポートしています。

または、依存関係がIDEで適切に管理されている場合、intelliJからメインクラスを実行することもできます。メインクラスは、SpringApplication.run("classpath:/applicationContext.xml", args);を呼び出すmainメソッドを含むクラスです

5
astronauthere

JRebelを使用することもできます-Spring Beanを含むすべての変更(より良いホットスワップ)を再ロードします。 IntellijとEclipseの両方に簡単に統合できます。

5
Jakub Kubrynski

pom.xmlでこのspring-boot-devtoolsタグを使用してみてください

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
 </dependencies>

http://mytechnologythought.blogspot.com/2017/07/how-to-run-server-of-spring-boot-auto.html

3
Vipul Gulhane

Thymeleaf (テンプレートエンジン)、 個人開発者向けのjRebel をお勧めします。 Thymeleafテンプレートファイルは、単なるHTMLリソースです。したがって、テンプレートファイルを編集するとすぐに変更されます。

2
Jason Im

1.3.0から。 (現在はマイルストーン2にあります)、lightweigtアプローチとしてspring-boot-devtoolsを使用できます- docs または this blogpost を参照してください。単に1.3.0以上にアップグレードしてください。そして、pom.xmlに次を追加します。

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
  </dependency>
</dependencies>

RunBoot ...でSpringBootApplicationを起動するよりも大丈夫です。

1
jonashackt

Mavenを使用している場合、pom.xmlのspring-boot-maven-pluginは、ホットスワップを取得するために次のようにする必要があります。

  <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.0.RELEASE</version>
            </dependency>
        </dependencies>
    </plugin>

そして、thymeleafを使用している場合、これをアプリケーションのプロパティに追加します。

spring.thymeleaf.cache=false

しかし、覚えておいてください。実稼働環境ではこれを使用しないでください。

0
Rafael Lima

Springbootアプリケーションでホットスワップを実行する方法

  1. Gradleを使用する場合、依存関係に以下を含めます:_compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.1.RELEASE'_&providedRuntime('org.springframework.boot:spring-boot-starter-Tomcat')

  2. application.propertiesプロパティを追加_spring.devtools.restart.additional-paths=._

  3. Gradleをビルドしてから、bootRunとしてアプリケーションを実行します

アプリケーションは、クラスの変更時にホットスワップを実行する準備ができています

0
Amey