Apa yang Baru dalam Spring Boot 2?

1. Gambaran keseluruhan

Spring Boot membawa pendekatan berpusat pada ekosistem Spring. Pertama kali dikeluarkan pada pertengahan 2014. Spring Boot telah melalui banyak pembangunan dan peningkatan. Versi 2.0 hari ini bersiap sedia untuk dilancarkan pada awal tahun 2018.

Terdapat pelbagai bidang di mana perpustakaan popular ini cuba membantu kami:

  • Pengurusan ketergantungan. Melalui pemula dan pelbagai integrasi pengurus pakej
  • Konfigurasi automatik. Mencuba untuk meminimumkan jumlah konfigurasi aplikasi Spring perlu bersiap sedia dan memilih konvensyen berbanding konfigurasi
  • Ciri siap pengeluaran. Seperti Penggerak , pembalakan, pemantauan, metrik atau integrasi pelbagai PAAS yang lebih baik
  • Pengalaman pembangunan yang dipertingkatkan. Dengan pelbagai utiliti ujian atau gelung maklum balas yang lebih baik menggunakan spring-boot-devtools

Dalam artikel ini, kami akan meneroka beberapa perubahan dan ciri yang dirancang untuk Spring Boot 2.0. Kami juga akan menerangkan bagaimana perubahan ini dapat membantu kami menjadi lebih produktif.

2. Kebergantungan

2.1. Garis Dasar Java

Spring Boot 2.x tidak lagi menyokong Java 7 dan ke bawah , menjadi Java 8 sebagai syarat minimum.

Ini juga versi pertama untuk menyokong Java 9. Tidak ada rancangan untuk mendukung Java 9 di cabang 1.x. Ini bermaksud jika anda ingin menggunakan pelepasan Java terbaru dan memanfaatkan kerangka ini, Spring Boot 2.x adalah satu-satunya pilihan anda .

2.2. Bil bahan

Dengan setiap rilis baru Spring Boot, versi dari pelbagai kebergantungan ekosistem Java ditingkatkan. Ini ditakrifkan dalam Boot bill bahan alias BOM .

Dalam 2.x ini tidak terkecuali. Tidak masuk akal untuk menyenaraikannya, tetapi kita dapat melihat dependensi spring-boot.pom untuk melihat versi apa yang digunakan pada waktu tertentu.

Beberapa sorotan mengenai versi minimum yang diperlukan:

  • Versi minimum Tomcat yang disokong ialah 8.5
  • Versi Hibernate minimum yang disokong ialah 5.2
  • Versi Gradle minimum yang disokong ialah 3.4

2.3. Plugin Gradle

Plugin Gradle telah melalui peningkatan besar dan beberapa perubahan yang mendadak.

Untuk membuat balang lemak, tugas bootRepackage Gradle diganti dengan bootJar dan bootWar masing-masing untuk membina tempayan dan perang.

Sekiranya kita ingin menjalankan aplikasi kita dengan plugin Gradle, dalam 1.x, kita dapat menjalankan bootRun gradle. Dalam 2.x bootRun meluaskan JavaExec Gradle . Ini menunjukkan bahawa lebih mudah bagi kita untuk mengkonfigurasinya dengan menerapkan konfigurasi yang sama seperti yang biasa kita gunakan dalam tugas JavaExec klasik .

Kadang-kadang kita mendapati diri kita ingin memanfaatkan Spring Boot BOM. Tetapi kadang-kadang kita tidak mahu membuat aplikasi Boot penuh atau membungkus semula.

Dalam hal ini, adalah menarik untuk mengetahui bahawa Spring Boot 2.x tidak lagi menggunakan plugin pengurusan kebergantungan secara lalai .

Sekiranya kita mahukan pengurusan pergantungan Spring Boot kita harus menambah:

apply plugin: 'io.spring.dependency-management'

Ini memberi kita fleksibiliti yang lebih besar dengan konfigurasi yang kurang dalam senario yang disebutkan di atas.

3. Konfigurasi automatik

3.1. Keselamatan

Dalam 2.x konfigurasi keselamatan dipermudahkan secara dramatik. Secara lalai, semuanya dilindungi, termasuk sumber statik dan titik akhir Penggerak.

Setelah pengguna mengkonfigurasi keselamatan secara jelas, lalai Spring Boot akan berhenti mempengaruhi. Pengguna kemudian dapat mengkonfigurasi semua peraturan akses di satu tempat.

Ini akan mengelakkan kita daripada bergelut dengan masalah pesanan WebSecurityConfigurerAdapter . Masalah-masalah ini biasa terjadi biasanya ketika mengkonfigurasi peraturan keselamatan Actuator dan App dengan cara tersuai.

Mari kita lihat coretan keselamatan mudah yang menggabungkan peraturan penggerak dan aplikasi:

http.authorizeRequests() .requestMatchers(EndpointRequest.to("health")) .permitAll() // Actuator rules per endpoint .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("admin") // Actuator general rules .requestMatchers(PathRequest.toStaticResources().atCommonLocations()) .permitAll() // Static resource security .antMatchers("/**") .hasRole("user") // Application security rules // ...

3.2. Sokongan Reaktif

Spring Boot 2 membawakan satu set permulaan baru untuk modul reaktif yang berbeza. Beberapa contoh adalah WebFlux, dan rakan reaktif untuk MongoDB, Cassandra atau Redis.

Terdapat juga utiliti ujian untuk WebFlux. Khususnya, kita dapat memanfaatkan @WebFluxTest. Ini berkelakuan sama dengan yang lebih tua @WebMvcTest asalnya diperkenalkan sebagai sebahagian daripada pelbagai ujian keping belakang dalam 1.4.0.

4. Ciri-ciri Sedia Pengeluaran

Spring Boot membawa beberapa alat yang berguna untuk membolehkan kami membuat aplikasi siap pengeluaran. Antara lain, kita boleh memanfaatkan Spring Boot Actuator.

Penggerak mengandungi pelbagai alat untuk mempermudah pemantauan, penelusuran, dan introspeksi aplikasi umum. Maklumat lebih lanjut mengenai penggerak boleh didapati dalam artikel kami sebelumnya.

Dengan penggerak versi 2 telah melalui peningkatan besar. Pengulangan ini menumpukan pada penyederhanaan penyesuaian. Ia juga menyokong teknologi web lain, termasuk modul reaktif baru.

4.1. Sokongan Teknologi

Dalam Spring Boot 1.x hanya Spring-MVC yang disokong untuk titik akhir penggerak. Dalam 2.x, bagaimanapun, ia menjadi mandiri dan dapat dilepaskan. Spring boot kini memberikan sokongan di luar kotak untuk WebFlux, Jersey, dan Spring-MVC.

As before, JMX remains an option and can be enabled or disabled through configuration.

4.2. Creating Custom Endpoints

The new actuator infrastructure is technology-agnostic. Because of this, the development model has been redesigned from scratch.

The new model also brings greater flexibility and expressiveness.

Let's see how to create a Fruits endpoint for actuator:

@Endpoint(id = "fruits") public class FruitsEndpoint { @ReadOperation public Map fruits() { ... } @WriteOperation public void addFruits(@Selector String name, Fruit fruit) { ... } }

Once we register FruitsEndpoint in our ApplicationContext, it can be exposed as a web endpoint using our chosen technology. We could also expose it via JMX depending on our configuration.

Translating our endpoint to web endpoints, this would result in:

  • GET on /application/fruits returning fruits
  • POST on /applications/fruits/{a-fruit} handling that fruit which should be included in the payload

There are many more possibilities. We could retrieve more granular data. Also, we could define specific implementations per underlying technology (e.g., JMX vs. Web). For the purpose of the article, we'll keep it as a simple introduction without getting into too much detail.

4.3. Security in Actuator

In Spring Boot 1.x Actuator defines its own security model. This security model is different from the one used by our application.

This was the root of many pain points when users were trying to refine security.

In 2.x the security configuration should be configured using the same config that the rest of the application uses.

By default, most actuator endpoints are disabled. This is independent of whether Spring Security is in the classpath or not. Beyond status and info, all the other endpoints need to be enabled by the user.

4.4. Other Important Changes

  • Most configuration properties are now under management.xxx e.g.: management.endpoints.jmx
  • Some endpoints have a new format. e.g.: env, flyway or liquibase
  • Predefined endpoint paths are no longer configurable

5. Enhanced Development Experience

5.1. Better Feedback

Spring boot introduced devtools in 1.3.

It takes care of smoothing out typical development issues. For example, caching of view technologies. It also performs automatic restarts and browser live-reloading. Also, it enables us to remote debug apps.

In 2.x when our application gets restarted by devtools a ‘delta' report will be printed out. This report will point out what changed and the impact it might have on our application.

Let's say we define a JDBC Datasource overriding the one configured by Spring Boot.

Devtools will indicate that the one autoconfigured is no longer created. It will also point out the cause, an adverse match in @ConditionalOnMissingBean for type javax.sql.DataSource. Devtools will print this report once it performs a restart.

5.2. Breaking Changes

Due to JDK 9 issues, devtools is dropping support for remote debugging through HTTP.

6. Summary

In this article, we covered some of the changes that Spring Boot 2 will bring.

We discussed dependencies and how Java 8 becomes the minimum supported version.

Next, we talked about autoconfiguration. We focused on security among others. We also talked about actuator and the many improvements it has received.

Lastly, we talked about some minor tweaks that happened in the development tools provided.