Konfigurasi Projek dengan Spring

Isi kandungan

  • 1. Konfigurasi mestilah Khusus untuk Persekitaran
  • 2. The .properties fail untuk Setiap Alam Sekitar
  • 3. Konfigurasi Musim Bunga
  • 4. Menetapkan Harta di Setiap Lingkungan
  • 5. Menguji dan Maven
  • 6. Melangkah Lebih Lanjut
  • 7. Kesimpulannya

1. Konfigurasi mestilah Khusus untuk Persekitaran

Konfigurasi mestilah khusus untuk persekitaran - itu hanya fakta kehidupan. Sekiranya itu tidak berlaku, maka itu bukan konfigurasi dan kami hanya akan menggunakan nilai kod keras dalam kod.

Untuk aplikasi Spring terdapat beberapa penyelesaian yang boleh anda gunakan - dari penyelesaian mudah hingga alternatif yang fleksibel dan sangat kompleks.

Salah satu penyelesaian yang lebih biasa dan mudah adalah penggunaan fail harta tanah yang fleksibel dan sokongan harta tanah kelas pertama yang disediakan oleh Spring.

Sebagai bukti konsep, untuk tujuan artikel ini, kita akan melihat satu jenis harta benda tertentu - konfigurasi pangkalan data. Adalah masuk akal untuk menggunakan satu jenis konfigurasi pangkalan data untuk pengeluaran, yang lain untuk ujian dan yang lain untuk persekitaran dev.

2. Fail .properties untuk Setiap Persekitaran

Mari mulakan Bukti Konsep kami - dengan menentukan persekitaran yang ingin kami sasarkan:

  • Penipu
  • Pementasan
  • Pengeluaran

Seterusnya - mari buat 3 fail sifat - satu untuk setiap persekitaran ini:

  • ketekunan-dev.properties
  • kegigihan-staging.properties
  • kegigihan- pengeluaran.kebolehan

Dalam aplikasi Maven yang biasa, aplikasi ini dapat berada di src / main / resource , tetapi di mana pun mereka berada, mereka harus tersedia di classpath ketika aplikasi digunakan.

Sidenote penting - mempunyai semua fail sifat di bawah kawalan versi menjadikan konfigurasi menjadi lebih telus dan boleh dihasilkan semula. Ini bertentangan dengan konfigurasi pada cakera di suatu tempat dan hanya mengarahkan Spring ke mereka.

3. Konfigurasi Musim Bunga

Pada musim bunga, kami akan memasukkan fail yang betul berdasarkan persekitaran:

Perkara yang sama tentu saja dapat dilakukan dengan konfigurasi Java juga:

@PropertySource({ "classpath:persistence-${envTarget:dev}.properties" })

Pendekatan ini membolehkan fleksibiliti mempunyai beberapa fail * .properties untuk tujuan khusus dan fokus . Sebagai contoh - dalam kes kami, konfigurasi Spring ketekunan mengimport sifat ketekunan - yang masuk akal. Konfigurasi keselamatan akan mengimport harta yang berkaitan dengan keselamatan dan sebagainya.

4. Menetapkan Harta di Setiap Lingkungan

Perang terakhir yang dapat diterapkan akan mengandungi semua fail sifat - untuk ketekunan, tiga varian sifat ketekunan - * . Oleh kerana fail sebenarnya dinamakan berbeza, tidak ada rasa takut secara tidak sengaja termasuk yang salah. Kita akan menetapkan yang envTarget berubah dan dengan itu memilih contoh yang kita mahu dari pelbagai varian sedia ada.

The envTarget berubah-ubah boleh ditetapkan dalam OS / persekitaran atau sebagai parameter kepada baris arahan JVM:

-DenvTarget=dev

5. Menguji dan Maven

Untuk ujian integrasi yang memerlukan ketekunan diaktifkan - kami hanya akan menetapkan harta envTarget di pom.xml:

 org.apache.maven.plugins maven-surefire-plugin   h2_test   

Fail persistence-h2_test.properties yang sesuai dapat ditempatkan dalam src / test / resource sehingga hanya akan digunakan untuk pengujian dan tidak perlu disertakan dan digunakan dengan perang pada waktu runtime.

6. Melangkah Lebih Lanjut

Terdapat beberapa cara untuk membina fleksibiliti tambahan ke dalam penyelesaian ini jika diperlukan.

Salah satu cara adalah dengan menggunakan pengekodan yang lebih kompleks untuk nama - nama fail sifat, yang menentukan bukan hanya lingkungan di mana ia akan digunakan, tetapi juga lebih banyak maklumat (seperti penyedia kegigihan). Sebagai contoh, kami mungkin menggunakan jenis sifat berikut: persistence-h2.properties , persistence-mysql.properties atau, bahkan lebih spesifik: persistence-dev_h2.properties , persistence-staging_mysql.properties , persistence-production_amazonRDS.properties .

Kelebihan konvensyen penamaan seperti itu - dan itu hanya konvensyen kerana tidak ada perubahan dalam pendekatan keseluruhan - hanyalah ketelusan. Sekarang menjadi lebih jelas apa yang dilakukan oleh konfigurasi hanya dengan melihat namanya:

  • persistence-dev_h2.properties : penyedia kegigihan untukpersekitaran dev adalah pangkalan data H2 dalam memori yang ringan
  • persistence-staging_mysql.properties : penyedia kegigihan untukpersekitaran pementasan adalah contoh MySQL
  • persistence-production_amazon_rds.propertie : penyedia kegigihan untukpersekitaran pengeluaran adalah Amazon RDS

7. Kesimpulannya

Artikel ini membincangkan penyelesaian yang fleksibel untuk melakukan konfigurasi khusus persekitaran pada musim bunga. Penyelesaian alternatif menggunakan profil boleh didapati di sini.

Pelaksanaan penyelesaian boleh didapati di projek GitHub - ini adalah projek yang berbasis di Maven, jadi semestinya mudah diimport dan dijalankan sebagaimana adanya.