多くのネチズンは、時々、Spring Boot Projectのテスト方法、展開方法、および生産に優れた展開ソリューションがあるかどうかを尋ねます。この記事では、Spring Bootが開発、デバッグ、パッケージ化され、最終的に生産と発売にどのように配置されるかを紹介します。
開発段階
単体テスト
開発段階で最も重要なことは、ユニットテストです。 Springbootのユニットテストのサポートは完成しました。
1。POMパッケージにスプリングブートスターターテストパッケージを追加します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <scope> test </scope> </dependency>
2。開発とテスト
最も単純なHelloworldを例にとると、@runwith(springrunner.class)と@springboottestアノテーションをテストクラスのクラスヘッドに追加する必要があります。テスト方法の上部に@Testを追加するだけで、最後に実行する方法を右クリックします。
@runwith(springrunner.class)@springboottestpublic class applicationtests {@test public void hello(){system.out.println( "hello world"); }}実際には、テストと検証のためのプロジェクトの通常の使用に応じて、DAOレイヤーコードまたはサービスレイヤーコードを挿入できます。 Spring-Boot-Starter-Testは多くの基本的な使用法を提供します。さらに珍しいのは、コントローラー層テストのサポートを追加することです。
//結果セットが正しいかどうかを確認します。Assertequals(3、usermapper.getAll()。size()); //結果セットを検証し、ASSERT.ASSERTTRUE( "エラー、正しい返品値は200"、status == 200); assert.assertfalse( "エラー、正しい返品値は200"、ステータス!= 200);
MOCKMVCは、コントローラー層のテストをサポートするために導入されています。簡単な例は次のとおりです。
パブリッククラスHellocontrolertests {private mockmvc mvc; // executionを初期化@before public public void setup()throws exception {mvc = mockmvcbuilders.standalonesetup(new hellocontroller())。build(); } //コントローラーが正常に応答してリターン結果を印刷するかどうかを確認します@test @test public void gethello()throws exception {mvc.perform( "/hello")。 .anddo(mockmvcresulthandlers.print()).andreturn(); } //コントローラーが正常に応答するかどうかを確認し、戻り結果が正しいかどうかを判断する@test @test public void testhello()throws {mvc.perform( "/hello")。 .AndExpect(content()。string(equalto( "hello")。accept(mediatype.application_json)).andexpect(status()。isok()).andexpect(content()。ユニットテストは、コードを検証する最初の障壁です。コードの一部を書くたびに、単体テストの習慣を身に付ける必要があります。テストする前に、すべてが統合されるまで待たないでください。統合後、全体的な操作効果にもっと注意を払うため、コードの下部でバグを見逃すのは簡単です。
統合テスト
全体的な開発が完了した後、統合テストが入力されます。 Spring Bootプロジェクトのスタートアップの入り口は、アプリケーションクラスにあります。実行方法を直接実行して、プロジェクトを開始できます。ただし、デバッグプロセス中に、コードを常にデバッグする必要があります。コードが変更されるたびにサービスを手動で再起動する必要がある場合は、非常に面倒です。 Spring Bootは、ホット展開サポートを非常に非常によく提供しています。これは、Webプロジェクトでのデバッグや使用に非常に便利です。
POMは次の構成を追加する必要があります。
<dependencies> <dependency> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-devtools </artifactid> <optional> true </optional> </depence> </dependencies> <build> <pragins> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <configuration> <fork> true </fork> </configuration> </plugin> </plugins> </build>
上記の構成を追加した後、プロジェクトはホット展開をサポートします。これは統合テストに非常に便利です。
制作に出てオンラインに行く
実際、この段階は比較的シンプルで、一般に2つのタイプに分割されるべきだと思います。1つはJARパッケージにパッケージ化して直接実行することであり、もう1つはそれを戦争パッケージにパッケージ化してTomcatサーバーの下に置くことです。
JARパッケージにします
Mavenを使用してプロジェクトを管理している場合は、次のコマンドを実行します
CDプロジェクトとディレクトリ(pom.xmlと同じレベル)MVNクリーンパッケージ##または次のコマンドを実行して、テストコードとパッケージMVNクリーンパッケージ-dmaven.test.skip = trueを除外します
パッケージが完了すると、ターゲットディレクトリでJARパッケージが生成されます。名前は通常、プロジェクト名 +バージョン番号。jarです
JARパッケージコマンドを開始します
Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar
このようにして、コンソールが閉じている限り、サービスにアクセスできません。バックグラウンドで実行して以下を始めましょう。
Nohup Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar&
開始時に異なる構成ファイルを読み取ることもできます
Java -jar app.jar - -spring.profiles.active = dev
起動時にJVMパラメーターを設定することもできます
Java -xms10m -xmx80m -jar app.jar&gradle
Gradleを使用している場合は、次のコマンドを使用してパッケージ化します
Gradle buildjava -jar build/libs/mymodule-0.0.1-snapshot.jar
戦争バッグにしてください
最初のタイプは、開発ツールのEclipseを介して戦争パッケージをエクスポートするために使用できます。他のタイプは、コマンドを使用してそれを完了することです。ここでは、主に後者を紹介します。
1。Mavenプロジェクト、POMパッケージを変更します
意思
<パッケージ> jar </packaging>
に変更します
<パッケージ>戦争</パッケージ>
2。パッケージング時にTomcatを除外します。
<Dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-stomcat </scope </scope
ここでは、TomcatやJettyなどのサーバーが実行時に関連するAPIクラスを提供するため、JARパッケージが最終戦争に含まれないように、Scopeプロパティを提供するように設定します。
3.スタートアップクラスを登録します
Servletinitializer.javaを作成し、Springbootservletinitializerを継承し、configure()をオーバーライドし、スタートアップクラスアプリケーションを登録します。外部WebアプリケーションサーバーがWebアプリケーションコンテキストを構築すると、スタートアップクラスが追加されます。
パブリッククラスServletInitializer springbootservletinitializer {@Override Protected SpringApplicationBuilder Configure(SpringApplicationBuilder Application){return application.sources(application.class); }}最終実行
MVN Clean Package -dmaven.test.skip = true
プロジェクト名 +バージョン番号。WARファイルはターゲットディレクトリで生成され、Tomcatサーバーにコピーして開始します。
等級
Gradleを使用している場合、基本的なステップは同じです。 build.gradleに戦争サポートを追加し、spring-boot-starter-tomcatを除外します。
...プラグインを適用: 'war' ... dependencies {compile( "org.springframework.boot:spring-boot-starter-web:1.4.2.release"){mymoduleを除外する: "spring-boot-starter-tomcat"}} ...Buildコマンドをもう一度使用します
Gradleビルド
戦争はBuild/LIBSディレクトリで生成されます。
生産運用とメンテナンス
JVMパラメーターの値を表示します
Javaに付属のJINFOコマンドに従うことができます。
jinfo -flags pid
瓶の開始後にGCが使用されるもの、新世代と高齢者のバッチにあるメモリの量を見てみましょう。例は次のとおりです。
-XX:CICOMPILERCOUNT = 3 -XX:InitialHeapsize = 234881024 -XX:MaxHeapsize = 3743416320 -XX:MaxNewSize = 1247805440 -XX:Minheapdeltabytes = 524288 -XX:Nishize = 78118912 -xx:oldsize = 156762112 -xx:+usecompresdedClasspointers -xx:+useCompressedoops -xx:+usefastunorderedtimestamps -xx:+use parallelgc -xx:cicompilercount:cicompilercount:maximing parallel compiles -xx:firitialheapisizes:maxheapsise et the heapeapsise secife secife secife secife secify -XX:MaxNewSize:JVMヒープ領域の新世代のメモリの最大アロペイク可能なサイズ... -XX:+useParallelgc:ガーベージコレクションはパラレルコレクターを使用します
再起動する方法
シンプルで粗雑な
プロセスを直接殺し、JARパッケージを再度開始します
PS -EF | GREP JAVA ## Javaプログラムのピッドキルを入手-9PID ##再びJava -Jar XXXX.Jar
もちろん、この方法はより伝統的で暴力的であるため、次の方法を使用してそれを管理することをお勧めします
スクリプトの実行
Mavenを使用している場合は、次の構成を含める必要があります
<Plugin> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <configuration> <executable> true </executabable> </configuration> </plugin>
Gradleを使用する場合は、次の構成を含める必要があります
springboot {execute = true}起動方法:
1. ./yourapp.jarで直接開始できます
2。サービスとして登録します
また、ソフトリンクを作成して、JARパッケージをポイントし、init.Dに追加して、コマンドで起動することもできます。
init.D例:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
この方法で、STOPまたは再起動コマンドを使用してアプリケーションを管理できます。
/etc/init.d/yourapp start | stop |再起動
または
Service YourApp Start | STOP |再起動します
この時点で、スプリングブートプロジェクトのテスト、共同調整、パッケージングが導入されました。スプリングブートの自動操作とメンテナンス、スプリングブートとDockerの組み合わせを調査する時間を見つけることができます。
サンプルコード-Github
サンプルコードコードクラウド
要約します
上記は、編集者が紹介したスプリングブートテストパッケージと展開の方法です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!