Banyak netizen akan bertanya kepada saya dari waktu ke waktu, bagaimana menguji proyek boot musim semi, bagaimana cara menggunakannya, dan apakah ada solusi penyebaran yang baik dalam produksi? Artikel ini akan memperkenalkan bagaimana Spring Boot dikembangkan, debugged, dikemas, dan akhirnya dimasukkan ke dalam produksi dan peluncuran.
Tahap pengembangan
Pengujian unit
Hal terpenting selama tahap pengembangan adalah pengujian unit. Dukungan Springboot untuk pengujian unit telah disempurnakan.
1. Tambahkan Referensi Paket Pegas-Boot-Starter-Test ke Paket POM
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> spring-boot-starter-test </t Artifactid> <scope> tes </seupop> </dependency>
2. Pengembangan dan Pengujian
Mengambil HelloWorld paling sederhana sebagai contoh, Anda perlu menambahkan: @runwith (springrunner.class) dan anotasi @springboottest ke kepala kelas kelas uji. Cukup tambahkan @test di bagian atas metode pengujian, dan akhirnya klik kanan pada metode untuk dijalankan.
@Runwith (springrunner.class) @springboottestpublic class applicationTests {@test public void hello () {System.out.println ("Hello World"); }}Dalam penggunaan aktual, Anda dapat menyuntikkan kode lapisan DAO atau kode lapisan layanan sesuai dengan penggunaan normal proyek untuk pengujian dan verifikasi. Spring-boot-starter-test menyediakan banyak penggunaan dasar, dan yang lebih jarang adalah menambahkan dukungan untuk pengujian lapisan pengontrol.
// Memverifikasi dengan sederhana apakah set hasil benar assert.assertequals (3, usermapper.getall (). Size ()); // Verifikasi set hasil, prompt assert.asserttrue ("Kesalahan, nilai pengembalian yang benar adalah 200", status == 200); Assert.assertFalse ("Kesalahan, nilai pengembalian yang benar adalah 200", status! = 200);MockMVC diperkenalkan untuk mendukung pengujian lapisan pengontrol. Contoh sederhana adalah sebagai berikut:
kelas publik HelloControlerTests {private mockmvc mvc; // inisialisasi eksekusi @Before public void setup () melempar Exception {mvc = mockmvcbuilders.standAleSonesetup (new helloController ()). Build (); } // Verifikasi apakah pengontrol merespons secara normal dan mencetak hasil pengembalian @test public void getHello () melempar Exception {mvc.perform (mockmvcrequestBuilders.get ("/hello"). Recreet (mediatype.application_json) .andexpect (mockmvsulult. .anddo (mockmvcresulthandlers.print ()) .andreturn (); } // Verifikasi apakah pengontrol merespons secara normal dan menentukan apakah hasil pengembalian benar @test public void testhello () melempar Exception {mvc.perform (mockmvcRequestBuilders.get ("/hello"). AcCT (MEDIATYPE.Application_json) .andekspect (status (). .Andexpect (content (). String (equalTo ("Hello"). AcCET (Mediatype.Application_json)) .AndExpect (status (). isok ()) .Andexpect (content (). String (equalto ("Hello World");}}Pengujian unit adalah penghalang pertama yang memverifikasi kode Anda. Anda harus mengembangkan kebiasaan pengujian unit setiap kali Anda menulis bagian dari kode Anda. Jangan menunggu sampai semuanya terintegrasi sebelum pengujian. Setelah integrasi, mudah untuk melewatkan bug di bagian bawah kode karena Anda lebih memperhatikan efek operasi secara keseluruhan.
Pengujian integrasi
Setelah pengembangan keseluruhan selesai, uji integrasi dimasukkan. Pintu masuk startup dari Proyek Spring Boot ada di kelas aplikasi. Anda dapat memulai proyek dengan menjalankan metode RUN secara langsung. Namun, selama proses debugging, kita harus terus -menerus men -debug kode. Jika Anda perlu memulai ulang layanan secara manual setiap kali kode dimodifikasi, itu akan sangat merepotkan. Spring Boot menyediakan dukungan penyebaran panas dengan sangat mempertimbangkan, yang sangat nyaman untuk debugging dan digunakan dalam proyek web.
POM perlu menambahkan konfigurasi berikut:
<Dependencies> <dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-devtools </artifactid> <plughins> true </opsional> </dependency> </dependencies> <build> <groupIns> <groupid> org.springfrework.boot.boot. <ArTifactId> spring-boot-maven-plugin </artifactid> <donfiguration> <fork> true </tork> </configuration> </lugin> </lugin> </bangun>
Setelah menambahkan konfigurasi di atas, proyek mendukung penyebaran panas, yang sangat nyaman untuk pengujian integrasi.
Pergi produksi dan online
Sebenarnya, saya pikir tahap ini harus relatif sederhana dan umumnya dibagi menjadi dua jenis: satu adalah mengemasnya ke dalam paket JAR dan menjalankannya secara langsung, dan yang lainnya adalah mengemasnya ke dalam paket perang dan meletakkannya di bawah server Tomcat.
Jadikan itu menjadi paket toples
Jika Anda menggunakan Maven untuk mengelola proyek Anda, jalankan perintah berikut
Proyek dan Direktori CD (Level yang Sama dengan Pom.xml) MVN Clean Paket ## atau jalankan perintah berikut ## untuk mengecualikan kode uji dan paket paket bersih mvn -dmaven.test.skip = true
Setelah kemasan selesai, paket JAR akan dihasilkan di direktori target. Namanya biasanya nama proyek + versi versi.jar
Mulai Perintah Paket JAR
Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar
Dengan cara ini, selama konsol ditutup, layanan tidak akan dapat diakses. Mari kita mulai yang berikut dengan berjalan di latar belakang:
NOHUP JAVA -JAR Target/Spring-Boot-Scheduler-1.0.0.jar &
Anda juga dapat memilih untuk membaca file konfigurasi yang berbeda saat memulai
java -jar app.jar --spring.profiles.active = dev
Anda juga dapat mengatur parameter JVM saat startup
java -xms10m -xmx80m -jar app.jar & gradle
Jika Anda menggunakan Gradle, gunakan perintah berikut untuk mengemas
Gradle buildjava -jar build/lib/mymodule-0.0.1-snapshot.jar
Jadikan itu menjadi tas perang
Jenis pertama dapat digunakan untuk mengekspor paket perang melalui gerhana alat pengembangan, dan jenis lainnya adalah menggunakan perintah untuk menyelesaikannya. Di sini kami terutama memperkenalkan yang terakhir.
1. Proyek Maven, Ubah Paket POM
Akan
<packaging> Jar </packaging>
Berubah menjadi
<packaging> perang </packaging>
2. Kecualikan Tomcat saat pengemasan.
<dependency> <GroupId> org.springframework.boot </groupid> <t Artifactid> Spring-boot-starter-web </stifactid> </dependency> <dependency> <grouptid> org.spramework.boot </groupid> <ArtiFacTid> <cring-boot-starter-tomcate.booty </groupid> <ArtiFacTID> Spring-boot-sticat-tomcat
Di sini, atur properti lingkup yang disediakan sehingga paket JAR tidak akan dimasukkan dalam perang akhir, karena server seperti Tomcat atau Jetty akan menyediakan kelas API yang relevan saat runtime.
3. Daftarkan kelas startup
Buat servletInitializer.java, warisan springbootservletinitializer, override configure (), dan daftarkan aplikasi kelas startup. Ketika server aplikasi web eksternal membangun konteks aplikasi web, kelas startup akan ditambahkan.
Kelas Publik ServletInitializer memperluas springbooterVletInitializer {@Override dilindungi springApplicationBuilder configure (Aplikasi SpringApplicationBuilder) {return application.sources (application.class); }}Eksekusi akhir
MVN Clean Package -DMaven.test.skip = True
Nama Proyek + Versi Number. File WAR akan dihasilkan di direktori target, dan menyalinnya ke server Tomcat untuk memulai.
lulusan
Jika Anda menggunakan Gradle, langkah dasarnya sama. Tambahkan Dukungan Perang di Build.Gradle dan Kecualikan Spring-Boot-Starter-Tomcat:
... Terapkan plugin: 'War' ... dependensi {compile ("org.springframework.boot: spring-boot-starter-web: 1.4.2.release") {mengecualikan mymodule: "Spring-boot-starter-tomcat"}} ...Gunakan perintah build lagi
Lulusan Build
Perang akan dihasilkan di direktori build/lib.
Operasi dan Pemeliharaan Produksi
Lihat nilai parameter JVM
Anda dapat mengikuti perintah jinfo yang datang dengan Java:
jinfo -flags pid
Mari kita lihat apa yang digunakan GC setelah toples dimulai, berapa banyak ingatan dalam batch di generasi baru dan orang tua. Contohnya adalah sebagai berikut:
Xxx: cicompilercount = 3 -xx: initialHeApsize = 234881024 -xx: maxheapsize = 3743416320 -xx: maxnewsize = 1247805440 -xx: MinHeapDeltabytes = 5242888 -xx: newsize = 7882882: 524288 -xx: NEWSIZE = 7882: 5888 -xx: newsize = 5881111 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC-XX:CICompilerCount : Maximum parallel compiles -XX:InitialHeapSize and -XX:MaxHeapSize: Specify the initial and maximum heap memory size of the JVM -XX:MaxNewSize: Ukuran alokabel maksimum untuk generasi baru memori di area tumpukan JVM ... -xx:+useparallelgc: Koleksi sampah menggunakan kolektor paralel
Cara memulai kembali
Sederhana dan kasar
Langsung bunuh proses dan mulai paket JAR lagi
ps -ef | grep java ## Dapatkan pidkill untuk program java -9 pid ## restart java lagi -jar xxxx.jar
Tentu saja, metode ini lebih tradisional dan kejam, jadi disarankan agar Anda menggunakan metode berikut untuk mengelolanya
Eksekusi skrip
Jika Anda menggunakan Maven, Anda harus menyertakan konfigurasi berikut
<lugin> <GroupId> org.springframework.boot </groupid> <ArTifactId> spring-boot-maven-plugin </artifactId> <onfigururation> <Eksekutable> true </executable> </configuration> </plugin>
Jika Anda menggunakan Gradle, Anda harus menyertakan konfigurasi berikut
Springboot {execute = true}Metode startup:
1. Anda dapat mulai langsung di ./yourapp.jar
2. Mendaftar sebagai Layanan
Anda juga dapat membuat tautan lunak untuk menunjuk ke paket JAR Anda dan menambahkannya ke init.d, dan kemudian memulainya dengan perintah.
init.d Contoh:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
Dengan cara ini Anda dapat menggunakan perintah berhenti atau restart untuk mengelola aplikasi Anda.
/etc/init.d/yourapp Mulai | Berhenti | Restart
atau
Layanan Anda Mulai | Berhenti | Restart
Pada titik ini, tes, koordinasi bersama dan pengemasan proyek Springboot telah diperkenalkan. Anda dapat menemukan waktu untuk mempelajari operasi otomatis dan pemeliharaan Springboot dan kombinasi Springboot dan Docker.
Kode Sampel - GitHub
Contoh kode kode kode
Meringkaskan
Di atas adalah metode kemasan uji boot pegas dan penyebaran yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!