จะวางไฟล์กำหนดค่าสปริงได้ที่ไหน


18

ฉันต้องการรวม Spring Framework ในโครงการของฉันเข้ากับฝั่งเซิร์ฟเวอร์โดยเฉพาะ

ดังนั้นฉันไม่ต้องการวางไว้ในโฟลเดอร์ WEB-INF ของไฟล์ war

ฉันควรใส่ applicationContext.xml ไว้ในแต่ละเลเยอร์ (หมายถึงแต่ละโครงการตั้งแต่แบ่งเป็นโครงการที่แตกต่างกันหรือไม่ (Services, Domain และ DAO)

การปฏิบัติที่ดีคืออะไร?


2
สิ่งนี้อาจเกี่ยวข้อง: stackoverflow.com/questions/5967405/…
NoChance

คำตอบ:


25

โครงสร้างไฟล์ Mavenอาจช่วยให้กับเรื่องนี้

ในสาระสำคัญแฟ้มการกำหนดค่าฤดูใบไม้ผลิ (ที่สามารถมีชื่อใด ๆ โดยวิธีการที่ไม่ได้เป็นเพียงทั่วไปapplicationContext.xml) จะถือว่าเป็นทรัพยากร classpath src/main/resourcesและยื่นใต้ ในระหว่างกระบวนการสร้างสิ่งเหล่านี้จะถูกคัดลอกไปยังWEB-INF/classesไดเรกทอรีซึ่งเป็นตำแหน่งปกติสำหรับไฟล์เหล่านี้เพื่อสิ้นสุด

รูปแบบรวมถึงspringไดเรกทอรีเพิ่มเติม(เช่นsrc/main/resources/spring) เพื่อแยกบริบท Spring จากทรัพยากรอื่น ๆ ที่อุทิศให้กับกรอบงานของแอปพลิเคชัน คุณอาจต้องการแยกบริบทของแอปพลิเคชันออกเป็นเลเยอร์เฉพาะเช่น:

example-servlet.xml
example-data.xml
example-security.xml

และอื่น ๆ

สิ่งที่เกี่ยวกับสภาพแวดล้อมที่แตกต่างกันเช่น dev / ทดสอบ / การผลิต?

โดยทั่วไปการกำหนดค่าสปริงของคุณควรเลือกการกำหนดค่าสภาพแวดล้อมจาก, ahem, สภาพแวดล้อม โดยทั่วไปหมายถึงการใช้ JNDI, JDBC, ตัวแปรสภาพแวดล้อมหรือไฟล์คุณสมบัติภายนอกเพื่อจัดเตรียมการกำหนดค่าที่จำเป็น ฉันแสดงรายการตามลำดับที่ต้องการเนื่องจากโดยทั่วไป JNDI จะจัดการได้ง่ายกว่าไฟล์คุณสมบัติภายนอกในคลัสเตอร์ที่ใช้งานจริงที่มีการควบคุม

ในกรณีของการทดสอบการรวมคุณอาจต้องใช้ไฟล์การกำหนดค่าแบบ "ทดสอบอย่างเดียว" ในฤดูใบไม้ผลิ นี้จะมีบริบทพิเศษที่ใช้ทดสอบถั่วหรือการกำหนดค่า สิ่งเหล่านี้จะอยู่ภายใต้ src / test / resources และอาจมีtest-คำนำหน้าเพื่อให้แน่ใจว่านักพัฒนาตระหนักถึงวัตถุประสงค์ของพวกเขา การใช้งานทั่วไปคือการจัดหาแหล่งข้อมูลที่ไม่ใช่ JNDI บางทีอาจกำหนดเป้าหมายไปยังฐานข้อมูล HSQLDB ในระหว่างการทดสอบอัตโนมัติแบบบิลด์และจะอ้างอิงภายในกรณีทดสอบ

อย่างไรก็ตามโดยทั่วไปแล้วไฟล์บริบทสปริงส่วนใหญ่ของคุณไม่จำเป็นต้องมีการปรับเปลี่ยนแบบพิเศษเนื่องจากจะย้ายไปมาระหว่างเทียร์ ควรเป็นกรณีที่มีการสร้างสิ่งประดิษฐ์เดียวกัน (เช่นไฟล์ WAR) ใน dev / ทดสอบ / การผลิตเพียงแค่มีข้อมูลประจำตัวที่แตกต่างกัน


2

โปรเจคของคุณแบ่งเป็นโมดูล Maven หรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถเพิ่มโมดูลพิเศษสำหรับไฟล์ปรับแต่งได้ ให้เรียกมันว่าโมดูลปรับแต่ง

config-module
      |
      |--> src\main\resources\config\spring\applicationContex.xml
      |--> src\main\resources\config\properties\application.properties
      |--> pom.xml

การกำหนดค่าดังกล่าวเป็นข้อเสนอแนะ ตั้งค่าชุดไฟล์ของคุณเอง มันคล้ายกับJARและเพิ่มโมดูลนี้เป็นการพึ่งพาของโมดูลอื่น ๆ (เว็บ, lib's ear, jar อื่น

คุณจะสามารถเข้าถึงทรัพยากรconfig-module (xml, properties, etc. ) เนื่องจากอยู่ใน classpath

ปอมของเว็บโมดูล

<dependency>
    <groupId>com.myproject.group</groupId>
    <artifactId>config-module</artifactId>
</dependency>

จากนั้นใช้คำสั่งนำเข้าจากไฟล์บริบทสปริงภายนอก ตัวอย่างเช่น

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />

นี่เป็นความคิดที่ยอดเยี่ยม! ฉันใช้เสรีภาพในการเพิ่มพิเศษเล็กน้อยเพราะตัวอย่าง "ทรัพยากรนำเข้า" ของคุณไม่ทำงานสำหรับฉัน ...... ฉันยังคงเรียนรู้ "การกรอง" ของคำสั่งนำเข้า (ตามชื่อแพ็คเกจเต็ม) ... และฉันไม่ได้ทำงานที่สะอึก (สำหรับผู้อ่านในอนาคต) เพื่อหันเหความสนใจจากความคิดและคำตอบที่ดีนี้ ขอบคุณ Laiv!
granadaCoder

หนึ่งในสาเหตุที่การนำเข้า "สิ่งที่ฉันคิดว่าควรทำ" ของคุณอาจล้มเหลวเนื่องจากข้อผิดพลาดนี้: github.com/spring-projects/spring-framework/issues/16017
granadaCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.