นักพัฒนาที่ไม่เข้าใจคุณสมบัติในฤดูใบไม้ผลิอาจพบว่ามันสับสนเล็กน้อยเนื่องจากมีวิธีการกำหนดค่ามากมายและวิธีการใช้งานมากมาย
บทความนี้ไม่ได้เป็นการวิเคราะห์หลักหรือบทความวิเคราะห์ซอร์สโค้ด แต่ฉันหวังว่ามันจะช่วยให้ผู้อ่านเข้าใจและใช้คุณสมบัติฤดูใบไม้ผลิได้ดีขึ้น
การใช้คุณสมบัติ
ผู้อ่านทั้งหมดของบทความนี้ใช้ฤดูใบไม้ผลิ ก่อนอื่นมาดูว่ามีการใช้คุณสมบัติอย่างไร มีวิธีการที่ใช้กันทั่วไปหลายวิธีในฤดูใบไม้ผลิ:
1. ใช้ในไฟล์กำหนดค่า XML
นั่นคือค่าใน $ {} จะถูกแทนที่โดยอัตโนมัติ
<bean id = "xxx"> <property name = "url" value = "$ {javadoop.jdbc.url}" /> </ebean>2. ใช้ผ่านการฉีด @Value
@Value ("$ {javadoop.jdbc.url}") url สตริงส่วนตัว;3. ได้รับผ่านสภาพแวดล้อม
มีบางสิ่งที่ให้ความสนใจในวิธีนี้ วิธีการกำหนดค่าทั้งหมดไม่สนับสนุนการรับค่าคุณสมบัติผ่านส่วนต่อประสานกับสภาพแวดล้อม การทดสอบส่วนบุคคลสามารถใช้ได้เฉพาะเมื่อใช้คำอธิบายประกอบ @PropertySource มิฉะนั้นจะได้รับ NULL สำหรับวิธีการกำหนดค่าฉันจะพูดถึงเรื่องนี้ทันทีด้านล่าง
@autowiredPrivate Environment Env; String Public String getUrl () {return env.getProperty ("javadoop.jdbc.url");}หากลงทะเบียนกับแอปพลิเคชัน Spring Boot Properties นั่นก็โอเค
การกำหนดค่าคุณสมบัติ
เราพูดถึงก่อนหน้านี้วิธีการใช้คุณสมบัติที่เรากำหนดค่าดังนั้นจะกำหนดค่าได้อย่างไร? สปริงมีวิธีการกำหนดค่ามากมาย
1. กำหนดค่าผ่าน XML
ต่อไปนี้เป็นวิธีการกำหนดค่าที่ใช้กันมากที่สุดและหลายโครงการเขียนเช่นนี้:
<บริบท: สถานที่ตั้งสถานที่ตั้งสถานที่ = "classpath: sys.properties" />>
2. กำหนดค่าผ่าน @PropertySource
การกำหนดค่า XML ก่อนหน้านี้เป็นเรื่องธรรมดามาก แต่ถ้าคุณมีความต้องการที่จะกำจัดไฟล์การกำหนดค่า XML ทั้งหมดคุณควรใช้วิธีการต่อไปนี้:
@PropertySource ("classpath: sys.properties")@configurationPublic คลาส JavadoopConfig {}โปรดทราบว่า @PropertySource จะต้องใช้กับ @configuration ที่นี่ดังนั้นฉันจะไม่เข้าไปดูรายละเอียด
3. PropertyPlaceHolderConfigurer
หากผู้อ่านเห็นสิ่งนี้มันไม่สำคัญว่าพวกเขาจะประหลาดใจหรือไม่ นี่คือวิธีที่ใช้ก่อนฤดูใบไม้ผลิ 3.1:
<ebean> <property name = "locations"> <list> <value> classpath: sys.properties </value> </list> </property> <property name = "istignoreunresolvableplaceholders" value = "true"/> <!-คุณสมบัติบางอย่างสามารถกำหนดค่าได้ที่นี่-> </ebean>
แน่นอนเราสามารถใช้เวอร์ชันการกำหนดค่า Java ที่เกี่ยวข้อง:
@BeanPublic PropertyPlaceHolderConfigurer Propertiess () {PropertyPlaceHolderConfigurer PPC = ใหม่ PropertyPlaceHolderConfigurer (); ทรัพยากร [] ทรัพยากร = ใหม่ classPathResource [] {ใหม่ classPathResource ("sys.properties")}; PPC.SetLocations (ทรัพยากร); PPC.ESTIGNOREUNRESOLVABLEPLACEHOLDERS (จริง); ส่งคืน ppc;}4. PropertySourcesplaceholderConfigurer
เมื่อมีการเปิดตัวฤดูใบไม้ผลิ 3.1 PropertySourcesplaceHolderConfigurer ได้รับการแนะนำซึ่งเป็นคลาสใหม่ โปรดทราบว่ามีแหล่งข้อมูลเพิ่มเติมในชื่อของ PropertyPlaceHolderConfigurer และแพคเกจที่เป็นของ PropertyPlaceHolderConfigurer มันอยู่ในแพ็คเกจสปริงเท็กซ์
ไม่มีความแตกต่างในการกำหนดค่า:
<ebean> <property name = "locations"> <list> <value> classpath: sys.properties </value> </list> </property> <property name = "istignoreunresolvableplaceholders" value = "true"/> <!-คุณสมบัติบางอย่างสามารถกำหนดค่าได้ที่นี่-> </ebean>
มามีเวอร์ชันการกำหนดค่า Java:
@BeanPublic PropertySourcesplacethonholderConfigurer Properties () {PropertySourcesplaceholderConFigurer PSPC = PropertySources PropertsPlaceHolderConfigurer (); ทรัพยากร [] ทรัพยากร = ใหม่ classPathResource [] {ใหม่ classPathResource ("sys.properties")}; PSPC.SetLocations (ทรัพยากร); PSPC.SetInGoreUnResolVablePlaceholders (จริง); ส่งคืน pspc;}สปริงบูตที่เกี่ยวข้อง
Spring Boot เป็นสิ่งที่ดีและรู้สึกดีมากที่ได้ใช้มันนอกกรอบ นี่คือการแนะนำสั้น ๆ เกี่ยวกับเนื้อหาที่เกี่ยวข้อง
สร้างโครงการสปริงบูตอย่างรวดเร็ว: https://start.spring.io/
Application.properties
แต่ละโครงการมีแอปพลิเคชันไฟล์ properties ตามค่าเริ่มต้น ไฟล์การกำหนดค่านี้ไม่จำเป็นต้องลงทะเบียนตามที่กล่าวไว้ก่อนหน้านี้ Spring Boot จะช่วยเราลงทะเบียนโดยอัตโนมัติ
แน่นอนบางทีคุณสามารถเปลี่ยนชื่อได้เพียงระบุชื่อไฟล์ของคุณเมื่อเริ่มต้น:
java -dspring.config.location = classpath: sys.properties -jar app.jar
แอปพลิเคชัน-{env} .properties
เพื่อระบุการกำหนดค่าที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกันเราจะใช้สิ่งนี้
ตัวอย่างเช่นข้อมูลการเชื่อมต่อฐานข้อมูลของสภาพแวดล้อมการทดสอบและสภาพแวดล้อมการผลิตแตกต่างกัน
ดังนั้นตามแอปพลิเคชันหน้าเรายังต้องสร้างแอปพลิเคชันใหม่-พร็อพเพอร์ทรีและแอปพลิเคชัน -PRD.Properties เพื่อกำหนดค่าข้อมูลที่เกี่ยวข้องกับสภาพแวดล้อมจากนั้นระบุสภาพแวดล้อมเมื่อเริ่มต้น
java -dspring.profiles.active = prd -jar app.jar
ผลลัพธ์คือการกำหนดค่าในทั้งแอปพลิเคชันไฟล์และแอปพลิเคชัน -PRD.Properties จะลงทะเบียน หากมีคีย์ที่ซ้ำกันลำดับความสำคัญในไฟล์ Application-PRD.Properties จะสูงขึ้น
@ConfigurationProperties
คำอธิบายประกอบนี้มีเฉพาะใน Spring Boot เท่านั้น
แม้ว่าคุณจะไม่ใช้คำอธิบายประกอบนี้คุณอาจเห็นสิ่งนี้ในโครงการโอเพนซอร์ส นี่คือการแนะนำสั้น ๆ
ลองมาเป็นตัวอย่างที่จะใช้งานง่ายมากขึ้น ดังที่ได้กล่าวไว้ก่อนหน้านี้กรอกข้อมูลต่อไปนี้ในไฟล์การกำหนดค่าคุณสามารถเลือกที่จะเขียนไปยัง Application.properties หรือใช้วิธีการที่แนะนำในส่วนแรก
javadoop.database.url = jdbc: mysql: javadoop.database.username = adminjavadoop.database.password = admin123456
ไฟล์ Java:
@configuration@configurationProperties (prefix = "javadoop.database") ฐานข้อมูลคลาสสาธารณะ {String url; ชื่อผู้ใช้สตริง; รหัสผ่านสตริง; // getters และ setters}ด้วยวิธีนี้ฐานข้อมูลถั่วจะลงทะเบียนโดยอัตโนมัติในคอนเทนเนอร์สปริงและตั้งค่าคุณสมบัติ
ปรับเปลี่ยนค่าแอตทริบิวต์แบบไดนามิกในระหว่างการเริ่มต้น
ฉันไม่คิดว่าสิ่งนี้ต้องการการแนะนำมากเกินไปและผู้ที่ใช้สปริงบูตควรรู้โดยทั่วไป
การกำหนดค่าแอตทริบิวต์มีลำดับการแทนที่นั่นคือเมื่อคีย์เดียวกันปรากฏขึ้นค่าจะต้องเหนือกว่า
พารามิเตอร์เริ่มต้น> Application- {env} .properties> application.properties
เริ่มพารามิเตอร์ที่ตั้งค่าคุณสมบัติแบบไดนามิก:
java -djavadoop.database.password = admin4321 -jar app.jar
นอกจากนี้คุณยังสามารถใช้ตัวแปรสภาพแวดล้อมระบบเพื่อตั้งค่าคุณสมบัติระบุตัวเลขสุ่ม ฯลฯ ซึ่งมีความยืดหยุ่นมาก แต่ก็ไร้ประโยชน์ดังนั้นฉันจะไม่แนะนำ
สรุป
หากผู้อ่านต้องการมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับคุณสมบัติฤดูใบไม้ผลิพวกเขาจำเป็นต้องเข้าใจซอร์สโค้ดที่เกี่ยวข้องกับอินเทอร์เฟซสภาพแวดล้อมฤดูใบไม้ผลิ ผู้อ่านที่สนใจควรค้นหาซอร์สโค้ด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น