Dari seorang penerjemah: meskipun satu tahun telah berlalu, pertanyaan tentang apa yang baru memberi kami Boot Kedua tidak berakhir di sana. Menulis konten seperti itu dari awal bukanlah ide yang paling cerdas. Oleh karena itu, kami memutuskan untuk menerjemahkan artikel itu, yang menurut kami paling ringkas dan pada saat yang sama cukup lengkap.
Rilis Spring Boot 2 terjadi pada awal 2018, dan semua orang ingin melihatnya segera beraksi. Rilis ini adalah puncak dari 17 bulan kerja dan lebih dari 6.800 komitmen dari 215 orang berbeda. Ada banyak fitur keren yang patut dibahas, jadi mari kita bicara tentang apa yang baru di Spring Boot 2.
Dalam artikel ini kami akan mempertimbangkan:
- Kisah Spring Boot
- Apa yang Baru di Boot Musim Semi
- Panduan Upgrade Spring Boot 2
Sejarah Boot Musim Semi
Sebelum mempelajari inovasi, saya ingin mengambil kesempatan ini dan menceritakan sedikit tentang sejarah Spring Boot. Dalam sebuah posting yang diposting pada Agustus 2013, Phil Webb mengumumkan rilis penting pertama dari proyek bernama Spring Boot di blog-nya.
Spring Boot dibuat untuk membuat pembuatan aplikasi dan layanan yang siap pakai di Spring sederhana, tanpa usaha yang tidak semestinya. Spring Boot adalah tampilan subjektif di platform Spring, yang memungkinkan pengguna pemula dan berpengalaman Spring menemukan semua yang mereka butuhkan. Menggunakan Boot, Anda dapat membuat aplikasi yang berdiri sendiri yang dijalankan sebagai 'java-jar' atau didistribusikan dalam format WAR yang lebih tradisional.
Setelah sekitar 9 bulan, pada bulan April 2014, Spring Boot 1.0 dirilis. Sejak itu, ada banyak rilis kecil dan fitur bermanfaat baru.
Spring Boot 1.1 (Juni 2014)
- spring-boot-starter-test
- Metrik & titik akhir kesehatan
- Konfigurasi elastis Pencarian, Solr Apache, Sosial Spring, dan Integrasi Spring
- Dukungan template (Freemaker, Groovy, dan Velocity)
Spring Boot 1.2 (Maret 2015)
- Servlet 3.1, Tomcat 8 & Jetty 9
- Musim Semi 4.1
- Penjelasan @SpringBootApplication
- Dukungan Email
Spring Boot 1.3 (Desember 2016)
- Meningkatkan Kerangka Kerja Musim Semi ke versi 4.2
- Meningkatkan Keamanan Musim Semi ke versi 4.0
- Alat pengembang
- Konfigurasi otomatis caching
- JAR dan Dukungan Layanan yang Dapat Dilakukan sepenuhnya
Spring Boot 1.4 (Januari 2017)
- Musim Semi 4.3
- Hibernasi 5
- Menguji Peningkatan
- Starter integrasi
- Dukungan untuk Couchbase dan Neo4J
Spring Boot 1.5 (Februari 2017)
- Titik akhir penebang
- Dukungan Apache Kafka
- Mekanisme canggih untuk Cloud Foundry
- Dukungan LDAP
- Menguji Pembaruan
Apa yang Baru di Musim Semi
Jadi apa yang baru di Spring Boot 2? Jika kita berbicara tentang inovasi terbesar, ini merupakan pembaruan dari Spring Framework ke versi ke-5. Sejak Spring Framework 5 dirilis pada September 2017, sebagian besar pengembang (seperti saya) telah menunggu rilis Spring Boot 2. Spring Framework 5 memiliki daftar fitur baru yang cukup banyak, tetapi saya hanya ingin berbicara tentang beberapa yang paling penting.
Apa yang Baru di Spring Framework 5
Dukungan Versi Java 8+
Jika Anda terus ingin membangun aplikasi di Spring Framework, Anda harus bekerja dengan Java versi 8+. Anda mungkin berpikir bahwa ini adalah perubahan yang sangat penting bagi kita semua, tetapi bagi tim Musim Semi itu bahkan lebih penting. Ini memungkinkan memperbarui basis kode sumber ke Java 8 dengan semua fitur barunya seperti ekspresi lambda atau stream. Ini tidak hanya membuat kode lebih mudah dibaca, tetapi juga meningkatkan kinerja inti platform.
Dukungan Java 9
Jika Anda ingin menggunakan Java 9, Anda perlu meningkatkan ke Spring Framework 5 dan juga ke Spring Boot 2. Saya tahu bahwa masih banyak yang tidak menggunakan versi terbaru Java dalam produksi, dan ini adalah peluang bagus untuk bereksperimen dengan "mainan" keren baru. Semuanya seharusnya bekerja tanpa masalah saat menggunakan classpath standar, tetapi saya membaca tentang beberapa kesulitan ketika beralih ke modul Java 9.
Musim semi mvc
Meskipun Spring MVC tidak berada di pusat cerita dalam artikel ini, perlu dikatakan bahwa ada beberapa peningkatan yang bagus. Saya tidak akan membahasnya, untuk detail, lihat dokumentasi untuk Spring Framework 5 .
Buat webflux
Aliran data asinkron adalah inti dari kisah Spring Framework 5. Ini adalah tipe pemikiran yang sangat berbeda, tetapi untungnya bagi kita, tidak perlu mempelajari kembali cara menulis aplikasi dengan cara yang benar-benar baru. Spring WebFlux adalah kerangka kerja yang benar-benar asinkron dan non-pemblokiran, dibangun dari awal, yang memungkinkan Anda untuk mengatasi sejumlah besar koneksi paralel. Meskipun ini adalah revolusi dalam paradigma, tidak akan terlalu sulit untuk memulai.

Dukungan Kotlin
Dukungan untuk Kotlin ditambahkan kembali di http://start.spring.io , tetapi Spring Framework 5 memiliki dukungan khusus untuk bahasa ini yang menghadirkan fitur-fitur bermanfaat, Anda dapat membacanya di sini .
Menguji Peningkatan
Perubahan terbesar dalam sistem pengujian adalah dukungan penuh untuk JUnit 5 Jupiter. Saya akan berbicara lebih banyak tentang ini nanti, tetapi ketika Anda meluncurkan aplikasi baru di Spring Boot 2, Anda masih menggunakan JUnit 4 secara default, namun, beralih ke JUnit 5 adalah tugas yang sepele.
Apa yang Baru di Spring Boot 2
Pembaruan Perpustakaan Pihak Ketiga
Dengan setiap rilis baru dari Boot Spring, tim Spring memiliki kesempatan untuk memperbarui berbagai dependensi.
- Thymeleaf 3 *
- Dermaga 9.4
- Tomcat 8.5
- Hibernasi 5.2
- Jalur Terbang 5
- Gradle 4
* Starter Thymeleaf sekarang memiliki built-in thymeleaf-ekstra-java8time.
Keamanan dan Data Pegas Reaktif
Dengan pindah ke Spring WebFlux, Spring Data telah menambahkan dukungan untuk aplikasi dengan aliran data asinkron. Cassandra, MongoDB, Couchbase, dan Redis saat ini memiliki dukungan API asinkron. Spring Boot memiliki permulaan POM untuk semuanya, sehingga mudah untuk memulai.
Ada juga kesempatan untuk menggunakan Spring Security 5.0 di aplikasi reaktif kami.
Aktuator
Spring Boot Actuator bukan hal yang baru, tetapi telah ditulis ulang dari awal. Jika Anda belum terbiasa dengan Actuator, inilah fungsinya: ia secara otomatis menampilkan titik akhir untuk mendapatkan informasi tentang status aplikasi. Aktuator di Spring Boot 1.x ditulis di atas servlets, dan dengan pendekatan reaktif yang baru, tim Spring membutuhkan solusi yang mendukung pendekatan lama dan reaktif. Selain itu, perubahan berikut telah dibuat untuk Aktuator:
- Desain ulang untuk mendukung servlets dan reaktivitas
- Status dan pemeriksaan kesehatan terperinci menjadi terpisah
- Model Keamanan Sederhana
- Beralih ke Mikrometer (seperti SLF4J, hanya untuk metrik)
- Struktur Data JSON yang ditingkatkan
- Proses yang disederhanakan untuk membuat titik akhir khusus.
- Titik akhir
- @ Webpoint
- @ JmxEndpoint
Kemungkinan ada kesulitan dalam meningkatkan karena perubahan dalam model keamanan, yang akan kita bicarakan nanti. Secara default, semua titik-web dapat diakses melalui jalur /actuator
dengan URL dari form /actuator/{id}
. Path / actuator
dapat diubah dalam pengaturan management.endpoints.web.base-path
.
Ada blok dokumentasi terpisah yang terperinci untuk Titik Akhir API Spring Boot Actuator , ada baiknya memulai pengantar alat ini.
Plugin Gradle
Saya selalu sangat menyukai Gradle, dan saya senang bahwa tim memutuskan untuk menulis ulang plugin untuk Gradle.
Plugin Spring Boot Gradle memungkinkan Anda untuk mengimplementasikan dukungan Spring Boot di Gradle dan memungkinkan Anda untuk mengemas arsip jar atau perang yang dapat dieksekusi, menjalankan aplikasi di Spring Boot dan mengelola dependensi melalui dependensi spring-boot. Plugin Gradle di Spring Boot membutuhkan Gradle versi 4.0 dan yang lebih baru.
Memulai
Untuk mulai bekerja dengan plugin, Anda perlu mengunggahnya ke proyek.
buildscript { repositories { maven { url 'https://repo.spring.io/libs-milestone' } } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RC1' } } apply plugin: 'org.springframework.boot'
Membuat arsip jar dan perang yang dapat dieksekusi
Tugas bootRepackage telah digantikan oleh bootJar dan bootWar masing-masing untuk membuat file jar dan perang. Kedua tugas memiliki fungsi lebih dari perintah standar Gradle yang sama, menyediakan akses ke semua pengaturan dan logika.
Manajemen ketergantungan
Plugin Spring Boot Gradle tidak lagi menarik plugin manajemen ketergantungan secara otomatis. Alih-alih, plugin Boot Musim Semi Gradle melihat bahwa plugin manajemen ketergantungan terhubung dan mengimpor versi BOM yang benar. Ini memungkinkan Anda untuk mengontrol dengan lebih baik di mana dan bagaimana manajemen ketergantungan dikonfigurasikan. Untuk sebagian besar aplikasi, menambahkan plugin manajemen ketergantungan sudah cukup:
apply plugin: 'io.spring.dependency-management'
Plugin Gradle memiliki dokumentasinya sendiri , yang berisi informasi yang sangat berguna. Saya merekomendasikan siapa pun yang ingin mulai bekerja dengan Gradle mengikuti tautan ini.
Keamanan Sederhana
Salah satu tujuan utama di Spring Boot 2.x adalah menyederhanakan konfigurasi keamanan dan membuatnya mudah untuk menambahkan pengaturan keamanan khusus. Secara default, semua data dilindungi, termasuk sumber daya statis dan titik akhir Actuator. Jika Spring Security berada di classpath, Spring Boot akan menambahkan anotasi @EnableWebSecurity
, dan mekanisme otentikasi spesifik apa yang akan digunakan akan menentukan mekanisme negosiasi konten dari Spring Security.
Ketika pengguna mengkonfigurasi aturan keamanan mereka, konfigurasi keamanan Boot Musim Semi standar akan berhenti berfungsi. Pada titik ini, pengguna perlu menjabarkan semua aturan keselamatan seakurat mungkin. Ini berarti bahwa semua pengaturan keamanan dikumpulkan di satu tempat dan tidak ada masalah dengan urutan pemrosesan perintah dengan WebSecurityConfigurerAdapters
ada.
Contoh pengaturan keamanan individual:
http .authorizeRequests() // 1 .requestMatchers(EndpointRequest.to("status", "info")) .permitAll() // 2 .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("ACTUATOR") // 3 .requestMatchers(StaticResourceRequest.toCommonLocations()) .permitAll() // 4 .antMatchers("/**") .hasRole("USER") .and() ... // additional configuration
/status
dan /info
tidak memerlukan otorisasi.- Semua aktuator lain dilindungi menggunakan peran
ACTUATOR
. - Lokasi sumber daya statis bersama tersedia untuk semua orang.
- Semua titik akhir aplikasi lainnya dilindungi oleh peran
USER
.
Keamanan Aktuator
Menimbang bahwa titik akhir aktuator sudah diperbaiki, Anda harus mengaktifkan atau mengecualikan titik akhir, tergantung mana yang Anda butuhkan. Berikut adalah pengaturan yang mengontrol ini, mereka telah berubah sejak rilis 1.x.
# ENDPOINTS WEB CONFIGURATION (WebEndpointProperties) management.endpoints.web.exposure.include=info,health # Endpoint IDs that should be included or '*' for all. management.endpoints.web.exposure.exclude= # Endpoint IDs that should be excluded. management.endpoints.web.base-path=/actuator # Base path for Web endpoints. Relative to server.servlet.context path or management.server.servlet.context-path if management.server.port is configured. management.endpoints.web.path-mapping= # Mapping between endpoint IDs and the path that should expose them.
Jika Anda tidak yakin cara mengonfigurasi pengaturan ini, tandai dokumentasi untuk pengaturan aplikasi umum .
Dukungan HTTP / 2
Hebatnya, rilis spesifikasi HTTP 1.1 sudah pada tahun 1996. Saya kira Anda tidak perlu mengingatkan bahwa jaringan modern berbeda dalam semua hal. Jika Anda ingin menerapkan dukungan HTTP / 2 dalam aplikasi di Spring MVC atau WebFlux, gunakan parameter berikut.
server.http2.enabled=true
Dukungan HTTP / 2 tergantung pada server web dan lingkungan aplikasi yang dipilih, karena protokol ini tidak didukung di JDK8 di luar kotak. Baca lebih lanjut tentang ini di dokumentasi .
Opsi konfigurasi
Dalam Spring Boot 1.x, yang disebut pengikatan santai didukung, dengan kata lain, Anda dapat menentukan nama parameter dalam banyak cara (case unta, garis bawah, tanda hubung), dan pada akhirnya, nilai ditugaskan ke properti yang sama.
Pengikatan yang rileks bekerja dengan cara yang sama, dan cara Anda membaca variabel dalam kode Anda telah berubah:

24. Konfigurasi Eksternalisasi
Spring Boot memungkinkan Anda mengeksternalisasi konfigurasi Anda sehingga Anda dapat bekerja dengan kode aplikasi yang sama di berbagai ... docs.spring.io
Metrik
Metrik Spring Boot khusus telah diganti dengan Mikrometer. Ini dikembangkan oleh tim Pivotal dan dengan cepat beradaptasi dengan proyek Pivotal.
Spring Boot Actuator menyediakan konfigurasi otomatis untuk Micrometer , antarmuka metrik aplikasi yang mendukung banyak jenis pemantauan, termasuk:

Informasi lebih lanjut tentang Mikrometer di https://micrometer.io/ .
Pembaruan karena hal ini dapat menyakitkan bagi mereka yang mencatat banyak metrik khusus.
Penjadwal kuarsa
Spring Boot 2 memiliki dukungan untuk pustaka eksekusi tugas terjadwal Kuarsa, yang mudah ditambahkan dengan menggunakan pegas-boot-starter-kuarsa. Didukung bekerja pada RAM dan pada JDBC.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
Kolam Koneksi HikariCP
Kumpulan koneksi standar telah berubah dari Tomcat ke HikariCP. Jika Anda menggunakan spring.datasource.type untuk membuat Hikari bekerja di aplikasi Tomcat Anda, Anda dapat menghapusnya. Demikian pula, jika Anda ingin terus menggunakan kumpulan Tomcat, cukup tambahkan yang berikut ini ke konfigurasi Anda:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
Alat Pengembang
Secara default, setiap kali aplikasi dihidupkan ulang, laporan tentang perbedaan konfigurasi dicatat. Dengan kata lain, laporan menunjukkan perubahan dalam konfigurasi otomatis aplikasi yang terjadi saat Anda membuat perubahan seperti menghapus / menambah kacang dan mengatur parameter konfigurasi.
Untuk menonaktifkan rekaman laporan ini, konfigurasikan parameter berikut:
spring.devtools.restart.log-condition-evaluation-delta=false
Dukungan Kotlin
Sebelumnya dalam artikel ini, dukungan resmi Kotlin disebutkan. Ada juga blok dokumentasi khusus untuk Kotlin .
Junit 5
Seperti yang disebutkan di atas, JUnit 4 masih digunakan secara default di aplikasi Spring Boot. Jika Anda ingin meningkatkan ke JUnit 5, Anda perlu mengecualikan JUnit 4 dari uji spring-boot-starter-test dan menambahkan dependensi yang diperlukan. Anda juga perlu plugin dari daftar di bawah ini.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit-platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
Panduan Upgrade Spring Boot 2
Saya pikir Anda tidak dapat berbicara tentang fakta yang begitu jelas sehingga dengan rilis yang begitu besar hanya mengubah nomor versi dalam produksi bukanlah cara terbaik untuk meningkatkan. Pertama-tama, saya akan merekomendasikan membaca Panduan Migrasi Spring Boot 2.0 . Secara pribadi, saya menemukan solusi untuk sebagian besar masalah saya dalam model keamanan yang disederhanakan dan perubahan parameter. Panduan ini memiliki beberapa tips hebat tentang migrasi file parameter.
Di Spring Boot 2.0, banyak parameter konfigurasi diganti namanya / dihapus, dan pengembang perlu memperbarui application.properties
/ application.yml
untuk mencerminkan perubahan ini. Untuk memfasilitasi tugas ini, Spring Boot telah mengirim modul spring-boot-properties-migrator
. Ditambahkan ke proyek Anda sebagai dependensi, itu tidak hanya akan menganalisis lingkungan aplikasi dan menampilkan hasil diagnostik saat startup, tetapi juga akan memigrasi parameter sementara untuk runtime. Ini adalah langkah yang perlu ketika memigrasi aplikasi:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency>
Saya tidak tahu apa yang Anda pikirkan tentang hal itu, tetapi saya pasti akan mulai mengacaukan Spring Boot 2 dan berupaya memigrasi kode ke versi ini, tetapi biasanya dengan rilis besar apa pun, saya menunggu versi minor berikutnya untuk dirilis. Ini tidak hanya berlaku untuk Spring, tetapi juga untuk merek lain dari Apple hingga Pivotal dan bahkan Angry Birds!