Membuat Permulaan Kustom dengan Spring Boot

1. Gambaran keseluruhan

Pembangun Spring Boot teras menyediakan permulaan untuk kebanyakan projek sumber terbuka yang popular, tetapi kami tidak terhad kepada ini.

Kita juga boleh menulis pemula khas kita sendiri . Sekiranya kita mempunyai perpustakaan dalaman untuk digunakan dalam organisasi kita, akan menjadi amalan yang baik untuk menulis permulaan jika ia akan digunakan dalam konteks Spring Boot.

Permulaan ini membolehkan pembangun mengelakkan konfigurasi yang panjang dan cepat memulakan perkembangannya. Walau bagaimanapun, dengan banyak perkara berlaku di latar belakang, kadang-kadang menjadi sukar untuk memahami bagaimana anotasi atau hanya memasukkan kebergantungan dalam pom.xml membolehkan begitu banyak ciri.

Dalam artikel ini, kami akan mengungkap sihir Spring Boot untuk melihat apa yang berlaku di sebalik tabir. Kemudian kami akan menggunakan konsep-konsep ini untuk membuat permulaan untuk perpustakaan tersuai kami sendiri.

2. Mengkonfigurasi Autokonfigurasi Spring Boot

2.1. Kelas Konfigurasi Auto

Apabila Spring Boot dimulakan, ia mencari fail bernama spring.factories di classpath. Fail ini terletak di direktori META-INF . Mari lihat petikan fail ini dari projek spring-boot-autoconfigure:

# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

Fail ini memetakan nama ke kelas konfigurasi yang berbeza yang akan dijalankan oleh Spring Boot. Jadi, seperti coretan ini, Spring Boot akan cuba menjalankan semua kelas konfigurasi untuk RabbitMQ, Cassandra, MongoDB dan Hibernate.

Adakah kelas ini benar-benar dijalankan atau tidak akan bergantung kepada kehadiran kelas bergantung pada jalan kelas. Sebagai contoh, jika kelas untuk MongoDB dijumpai di classpath, MongoAutoConfiguration akan dijalankan dan semua kacang yang berkaitan dengan mongo akan dimulakan.

Permulaan bersyarat ini diaktifkan oleh anotasi @ConditionalOnClass . Mari lihat coretan kod dari kelas Konfigurasi MongoAuto untuk melihat penggunaannya:

@Configuration @ConditionalOnClass(MongoClient.class) @EnableConfigurationProperties(MongoProperties.class) @ConditionalOnMissingBean(type = "org.springframework.data.mongodb.MongoDbFactory") public class MongoAutoConfiguration { // configuration code }

Sekarang bagaimana - jika MongoClient tersedia di classpath - kelas konfigurasi ini akan berjalan mengisi kilang kacang Spring dengan MongoClient yang dimulakan dengan tetapan konfigurasi lalai.

2.2. Custom Properties dari file application.properties

Spring Boot menginisialisasi kacang menggunakan beberapa lalai yang telah dikonfigurasi sebelumnya. Untuk mengatasi lalai tersebut, kami secara amnya menyatakannya dalam fail application.properties dengan beberapa nama tertentu. Sifat-sifat ini diambil secara automatik oleh bekas Spring Boot.

Mari lihat bagaimana ia berfungsi.

Dalam coretan kod untuk MongoAutoConfiguration , anotasi @EnableConfigurationProperties dinyatakan dengan kelas MongoProperties yang bertindak sebagai wadah untuk sifat tersuai:

@ConfigurationProperties(prefix = "spring.data.mongodb") public class MongoProperties { private String host; // other fields with standard getters and setters }

Awalan ditambah nama medan menjadikan nama-nama sifat dalam fail application.properties . Oleh itu, untuk menetapkan hos untuk MongoDB, kita hanya perlu menulis perkara berikut dalam fail harta tanah:

spring.data.mongodb.host = localhost

Begitu juga, nilai untuk medan lain dalam kelas dapat ditetapkan menggunakan fail harta tanah.

3. Membuat Permulaan Tersuai

Berdasarkan konsep di bahagian 2, untuk membuat starter tersuai kita perlu menulis komponen berikut:

  1. Kelas konfigurasi automatik untuk perpustakaan kami bersama dengan kelas sifat untuk konfigurasi tersuai.
  2. Permulaan pom untuk membawa kebergantungan perpustakaan dan projek konfigurasi automatik.

Sebagai demonstrasi, kami telah membuat perpustakaan ucapan sederhana yang akan menerima pesan ucapan untuk waktu yang berlainan dalam sehari sebagai parameter konfigurasi dan mengeluarkan mesej ucapan. Kami juga akan membuat contoh aplikasi Spring Boot untuk menunjukkan penggunaan modul autoconfigure dan starter kami.

3.1. Modul Autoconfigure

Kami akan memanggil modul konfigurasi automatik kami sebagai greeter-spring-boot-autoconfigure . Modul ini akan mempunyai dua kelas utama iaitu GreeterProperties yang akan membolehkan menetapkan sifat tersuai melalui file application.properties dan GreeterAutoConfiguartion yang akan membuat kacang untuk perpustakaan greeter .

Mari lihat kod untuk kedua-dua kelas:

@ConfigurationProperties(prefix = "baeldung.greeter") public class GreeterProperties { private String userName; private String morningMessage; private String afternoonMessage; private String eveningMessage; private String nightMessage; // standard getters and setters }
@Configuration @ConditionalOnClass(Greeter.class) @EnableConfigurationProperties(GreeterProperties.class) public class GreeterAutoConfiguration { @Autowired private GreeterProperties greeterProperties; @Bean @ConditionalOnMissingBean public GreetingConfig greeterConfig() { String userName = greeterProperties.getUserName() == null ? System.getProperty("user.name") : greeterProperties.getUserName(); // .. GreetingConfig greetingConfig = new GreetingConfig(); greetingConfig.put(USER_NAME, userName); // ... return greetingConfig; } @Bean @ConditionalOnMissingBean public Greeter greeter(GreetingConfig greetingConfig) { return new Greeter(greetingConfig); } }

Kita juga perlu menambahkan fail spring.factories dalam direktori src / main / resources / META-INF dengan kandungan berikut:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.baeldung.greeter.autoconfigure.GreeterAutoConfiguration

Pada permulaan aplikasi, kelas GreeterAutoConfiguration akan dijalankan sekiranya kelas Greeter hadir di classpath. Sekiranya dijalankan dengan jayanya, ia akan mengisi konteks aplikasi Spring dengan kacang GreeterConfig dan Greeter dengan membaca hartanah melalui kelas GreeterProperties .

The @ConditionalOnMissingBean anotasi akan memastikan bahawa kacang ini akan hanya dapat diwujudkan jika mereka belum lagi wujud. Ini membolehkan pembangun untuk mengatasi kacang yang dikonfigurasi secara automatik dengan menentukan sendiri dalam salah satu kelas @Configuration .

3.2. Membuat pom.xml

Sekarang mari kita buat starter pom yang akan membawa kebergantungan untuk modul konfigurasi automatik dan perpustakaan greeter.

Seperti dalam konvensyen penamaan, semua permulaan yang tidak dikendalikan oleh pasukan Spring Boot inti harus dimulakan dengan nama perpustakaan diikuti dengan akhiran -spring-boot-starter . Oleh itu, kami akan memanggil pemula kami sebagai pemula -musim bunga-boot:

 4.0.0 com.baeldung greeter-spring-boot-starter 0.0.1-SNAPSHOT  UTF-8 0.0.1-SNAPSHOT 2.2.6.RELEASE    org.springframework.boot spring-boot-starter ${spring-boot.version}   com.baeldung greeter-spring-boot-autoconfigure ${project.version}   com.baeldung greeter ${greeter.version}   

3.3. Menggunakan Permulaan

Mari buat aplikasi greeter-spring-boot-sample- yang akan menggunakan starter. Di pom.xml kita perlu menambahkannya sebagai pergantungan:

 com.baeldung greeter-spring-boot-starter ${greeter-starter.version} 

Spring Boot secara automatik akan mengkonfigurasi semuanya dan kami akan mempunyai kacang Greeter yang siap disuntik dan digunakan.

Mari juga ubah beberapa nilai lalai dari GreeterProperties dengan menentukannya dalam fail application.properties dengan awalan baeldung.greeter :

baeldung.greeter.userName=Baeldung baeldung.greeter.afternoonMessage=Woha\ Afternoon

Akhirnya, mari gunakan kacang Greeter dalam aplikasi kami:

@SpringBootApplication public class GreeterSampleApplication implements CommandLineRunner { @Autowired private Greeter greeter; public static void main(String[] args) { SpringApplication.run(GreeterSampleApplication.class, args); } @Override public void run(String... args) throws Exception { String message = greeter.greet(); System.out.println(message); } }

4. Kesimpulan

Dalam tutorial ringkas ini, kami memberi tumpuan untuk melancarkan starter Spring Boot khusus, dan bagaimana permulaan ini, bersama-sama dengan mekanisme konfigurasi automatik - berfungsi di latar belakang untuk menghilangkan banyak konfigurasi manual.

Kod sumber lengkap untuk semua modul yang kami buat dalam artikel ini boleh didapati di GitHub.