Saya ingin mengintegrasikan kerangka kerja Spring dalam proyek saya terutama ke sisi server.
Jadi, saya tidak ingin memasukkannya ke dalam folder file perang WEB-INF.
Haruskah saya meletakkan applicationContext.xml ke dalam setiap lapisan (berarti setiap proyek sejak dibagi dalam proyek yang berbeda? (Layanan, Domain, dan DAO)
Apa praktik yang baik?
Jawaban:
The struktur file Maven dapat membantu dengan ini
Pada dasarnya file konfigurasi Spring (yang dapat memiliki nama apa pun, bukan hanya generik
applicationContext.xml
) diperlakukan sebagai sumber daya classpath dan diajukan di bawahsrc/main/resources
. Selama proses pembangunan, ini kemudian disalin keWEB-INF/classes
direktori yang merupakan tempat normal untuk file-file ini berakhir.Variasi termasuk
spring
direktori tambahan (misalnyasrc/main/resources/spring
) untuk memisahkan konteks Spring dari sumber daya lain yang didedikasikan untuk kerangka kerja aplikasi. Anda mungkin ingin membagi konteks aplikasi menjadi lapisan khusus seperti:dan seterusnya.
Bagaimana dengan lingkungan yang berbeda seperti dev / test / produksi?
Biasanya, konfigurasi Spring Anda harus mengambil konfigurasi lingkungan dari, ahem, lingkungannya. Biasanya ini berarti menggunakan JNDI, JDBC, variabel lingkungan atau file properti eksternal untuk menyediakan konfigurasi yang diperlukan. Saya daftar mereka dalam urutan preferensi karena JNDI umumnya lebih mudah untuk mengelola daripada file properti eksternal dalam kluster produksi yang dikendalikan.
Dalam hal pengujian integrasi, Anda mungkin perlu menggunakan file konfigurasi Spring "hanya test". Ini akan berisi konteks khusus yang menggunakan kacang tes atau konfigurasi. Ini akan hadir di bawah src / test / resource dan mungkin memiliki
test-
awalan untuk memastikan bahwa pengembang mengetahui tujuan mereka. Penggunaan tipikal adalah menyediakan DataSource non-JNDI yang mungkin menargetkan basis data HSQLDB selama pembuatan tes otomatis dan akan dirujuk dalam kasus uji.Namun, secara umum sebagian besar file konteks Musim Semi Anda tidak perlu modifikasi khusus saat mereka bergerak di antara tingkatan. Seharusnya artefak build yang sama (misalnya file WAR) digunakan dalam dev / test / produksi hanya dengan kredensial yang berbeda.
sumber
Apakah proyek Anda terbagi dalam modul Maven? Jika demikian, Anda dapat menambahkan modul tambahan hanya untuk file konfigurasi. Mari kita sebut itu config-module
Konfigurasi seperti itu adalah saran. Atur file Anda sendiri. Atur paketnya seperti JAR dan tambahkan modul ini sebagai dependensi dari modul lain mana pun (web, ear lib, toples lain).
Anda akan memiliki akses ke sumber - sumber modul-konfigurasi (xml, properti, dll.) Karena mereka ada di classpath.
modul web pom
Kemudian gunakan pernyataan impor dari file konteks Spring eksternal. Sebagai contoh
sumber