Spring Boot 2: apa yang baru?

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.


Webflux


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 

  1. /status dan /info tidak memerlukan otorisasi.
  2. Semua aktuator lain dilindungi menggunakan peran ACTUATOR .
  3. Lokasi sumber daya statis bersama tersedia untuk semua orang.
  4. 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:


Baca data


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:



Mikrometer


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!

Source: https://habr.com/ru/post/id438980/


All Articles