ความครอบคลุมการกำหนดค่าดีกว่าโปรไฟล์
ในการฝึกการผลิตความครอบคลุมการกำหนดค่าเป็นวิธีทั่วไปในการแก้ปัญหาการกำหนดค่าที่แตกต่างกันในสภาพแวดล้อมที่แตกต่างกัน ตัวอย่างเช่นใช้ไฟล์การกำหนดค่าบนเซิร์ฟเวอร์การผลิตเพื่อเขียนทับไฟล์ในแพ็คเกจหรือใช้บริการการกำหนดค่าส่วนกลางเพื่อเขียนทับการกำหนดค่าธุรกิจเริ่มต้น
เมื่อเทียบกับกลไกโปรไฟล์ (เช่นโปรไฟล์ของ Maven และคุณสมบัติเฉพาะโปรไฟล์ของ Spring Boot) สภาพแวดล้อมที่แตกต่างกันใช้ไฟล์การกำหนดค่าที่แตกต่างกันและวิธีการซ้อนทับนั้นมีประโยชน์มากกว่า โปรแกรมเมอร์ไม่จำเป็นต้องใส่ใจเกี่ยวกับที่อยู่บัญชีและข้อมูลอื่น ๆ ของฐานข้อมูลสภาพแวดล้อมการผลิตในระหว่างการพัฒนา พวกเขาสามารถทำงานในสภาพแวดล้อมที่แตกต่างกันโดยการสร้างในครั้งเดียว กลไกโปรไฟล์ต้องเขียนการกำหนดค่าของสภาพแวดล้อมการผลิตลงในไฟล์ทรัพยากรโครงการและพารามิเตอร์การก่อสร้างหรือพารามิเตอร์การทำงานที่แตกต่างกันจะต้องใช้สำหรับสภาพแวดล้อมที่แตกต่างกัน
สปริงให้ความสามารถในการขยายการกำหนดค่าที่ยืดหยุ่นโดยมีหลายวิธีในการรวมแหล่งที่มาของแอตทริบิวต์ที่กำหนดเองเข้ากับมันช่วยให้ครอบคลุมการกำหนดค่าได้ง่าย
บทความนี้เขียนขึ้นจาก Spring Boot 1.4.8/Spring 4.3.12
ใช้คำอธิบายประกอบ @PropertySource เพื่อใช้ไฟล์การกำหนดค่าที่กำหนดเองและการแทนที่การกำหนดค่า
@configurationProperties@configurationPublic คลาส demoproperties {// คุณสมบัติด้วย getter/setters} @PropertySource (value = {"test.properties", "ไฟล์: /etc/test.properties",}, ไม่รู้ว่า yourcenotfound = true) @configurationpublic คลาส demoautoconfiguration {@autowired demoproperties @PostConstruct โมฆะสาธารณะ init () {system.out.println (demoproperties); -สปริงรองรับการแนะนำไฟล์การกำหนดค่าที่กำหนดเองโดยใช้คำอธิบายประกอบคุณสมบัติของ PropertySource โดยที่ "test.properties" จะทำให้สปริงโหลดไฟล์จาก classpath, "ไฟล์: /etc/test.properties" จะทำให้สปริงโหลด/test.properties ไฟล์
ในเวลาเดียวกันเนื่องจาก "ไฟล์: /etc/test.properties" อยู่หลังจาก "test.properties" สิ่งนี้จะช่วยให้ไฟล์การกำหนดค่าระบบไฟล์สามารถเขียนทับการกำหนดค่าภายใต้ classpath
โรงงานแหล่งที่มาที่กำหนดเอง
หากคุณต้องการปรับแต่งแหล่งที่มาของคุณสมบัติที่ยืดหยุ่นมากขึ้นเช่นการโหลดการกำหนดค่าจากบริการการกำหนดค่าส่วนกลางคุณสามารถใช้อินเทอร์เฟซ PropertySourceFactory และกำหนดค่าพารามิเตอร์จากโรงงานของคำอธิบายประกอบคุณสมบัติของ PropertySource
@configuration@propertySource (value = ""/*placeholder*/, factory = compositePropertySourceFactory.class) คลาสสาธารณะ compositeConfigautoconfiguration {}ฟิลด์ค่าใช้เพื่อระบุไฟล์ทรัพยากรที่สอดคล้องกับแหล่งที่มาการกำหนดค่า หากไม่จำเป็นต้องมีไฟล์ทรัพยากรคุณสามารถกำหนดค่าเป็นค่าใด ๆ ค่าพารามิเตอร์จะถูกส่งผ่านไปยังวิธี CreatePropertySource ของพารามิเตอร์โรงงาน
หากระบุฟิลด์ที่ไม่รู้ตัวของแหล่งที่มา บางครั้งมันเป็นวิธีปฏิบัติที่ดีในการเปิดเผยความล้มเหลวในการเริ่มต้นโดยตรง
คำจำกัดความของอินเทอร์เฟซ PropertySourceFactory มีดังนี้:
/*** อินเทอร์เฟซกลยุทธ์สำหรับการสร้าง wrappers {@link propertySource} ตามทรัพยากร * * @author Juergen Hoeller * @Since 4.3 * @See DefaultPropertySourceFactory * /Public Interface PropertySourceFactory { /** * สร้าง {@link PropertySource} ที่ห่อหุ้มทรัพยากรที่กำหนด * @param ชื่อชื่อของแหล่งข้อมูล * @param ทรัพยากรทรัพยากร (อาจเข้ารหัส) เพื่อห่อ * @ @ @ @@link property ใหม่} ใหม่ (ไม่เคย {@code null}) * @throws ioexception หากการแก้ไขทรัพยากรล้มเหลว */ คุณสมบัติควรสังเกตว่าเวลาในการโหลดของ PropertySourceFactory นั้นเร็วกว่าคอนเทนเนอร์ถั่วฤดูใบไม้ผลิดังนั้นการใช้งานจึงไม่สามารถขึ้นอยู่กับ IOC ของฤดูใบไม้ผลิได้
PropertySourceFactory ต้องการคลาสการใช้งานเพื่อส่งคืนคุณสมบัติ Source PropertySource เป็นอินเทอร์เฟซหลักของฟังก์ชั่น Spring Property (หรือการกำหนดค่า) และมีการใช้งานมากมายเช่น:
คลาสการใช้งานจริงนั้นด้อยกว่าสิ่งเหล่านี้มาก สำหรับวัตถุประสงค์เฉพาะคุณสามารถอ่านเอกสารประกอบสปริงหรือซอร์สโค้ด
MappropertySource และ CompositePropertySource มักใช้เมื่อปรับแต่งแหล่งที่มาของทรัพย์สิน
MappropertySource สามารถใช้ในการห่อข้อมูลคุณสมบัติที่โหลดเองอ้างอิงถึงวิธีการก่อสร้าง
สาธารณะ mappropertysource (ชื่อสตริง, แผนที่ <สตริง, วัตถุ> แหล่งที่มา) {super (ชื่อ, แหล่งที่มา);}หลังสามารถโหลดแหล่งที่มาของคุณลักษณะหลายอย่างโดยการรวมและปรับแต่งลำดับการแทนที่ ตัวอย่างเช่น:
PropertySource <?> PackageInsidePropertySource = PackageInsidePropertySourceIterAteloader.LoadPropertySource (ComposItePropertySource); CompositePropertySource.addPropertySource (PackageInsidePropertySource) สถานที่ให้บริการ <propacterinsidePropertySource) CompositePropertySource.addfirstPropertySource (OUTERFILEPROPERTYSource);
วิธี AddFirstPropertySource สามารถตั้งค่าคุณสมบัติที่เข้ามาเป็นลำดับความสำคัญสูงสุด (ภายใน CompositePropertySource นี้) และวิธีการ addPropertySource นั้นตรงกันข้ามและลำดับความสำคัญต่ำกว่าหลังจากนั้น
โหลดไฟล์การกำหนดค่าทั้งหมดด้วยชื่อเดียวกันในแพ็คเกจ jar ที่พึ่งพา
การโหลดไฟล์การกำหนดค่าโดยตรงจาก classpath ต้องการให้ไฟล์ต้องมีอยู่ใน classpath พิจารณาในโครงการเว็บหากไฟล์มีอยู่ในแพ็คเกจ jar ที่พึ่งพานั่นคือมันอยู่ใน web-inf/lib/xxx.jar มันไม่สามารถโหลดได้โดยตรงตาม classpath ในเวลานี้คุณสามารถใช้ PathMatchingResourcePatternResolver ที่จัดทำโดยฤดูใบไม้ผลิเพื่อสแกนแพ็คเกจ JAR ทั้งหมดด้วยชื่อทรัพยากรเพื่อให้บรรลุวัตถุประสงค์
รายการส่วนตัว <SROPERSE> getPackageInerEsourcesBypattern (String resourcename) พ่น IOException {String ResourcePathPattern = ResourcePatterNresolver.classPath_all_url_prefix + hbootconfigconstants.configs + resourcename; ResourcePatterNresolver ResourcePatterNresolver = ใหม่ PathMatchingResourcePatterNresolver (); return array.aslist (ResourcePatternResolver.getResources (ResourcePathPattern));} จากนั้นคุณสามารถใช้ ResourcePropertySource เพื่อสร้างคุณสมบัติ Source จากทรัพยากรเพื่อผ่านไปยังฤดูใบไม้ผลิ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น