เป้าหมายของฉันคือการเพิ่ม PropertySource ที่กำหนดเองให้กับ spring-cloud-server สิ่งที่ฉันต้องการบรรลุคือการได้รับคุณสมบัติที่กำหนดเองจากแหล่งที่มาที่กำหนดเองนั้นในแอปพลิเคชัน spring-cloud-config-client
อิงตามคำแนะนำจาก การเพิ่มที่เก็บสภาพแวดล้อมใน spring-config-server I ได้สร้าง spring-cloud-config-server
แอปพลิเคชันและแยกโครงการ spring-cloud-config-custom
แล้ว อันที่สองขึ้นอยู่กับ spring-cloud รหัส -consul-config ดังนั้นฉันจึงสร้างคลาสที่จำเป็นทั้งหมด เช่น CustomPropertySource
, CustomPropertySourceLocator
, CustomConfigBootstrapConfiguration
และอื่นๆ และกำหนดค่าไว้ใน spring.factories
ในตอนท้ายฉันได้เพิ่มการพึ่งพา Maven ให้กับ spring-cloud-config-custom
ภายใน spring-cloud-config-server
ของฉัน
จนถึงตอนนี้ดีมาก ทุกอย่างทำงานได้ดี เมื่อฉันเริ่มเซิร์ฟเวอร์ ฉันเห็นว่า CustomPropertySource
ของฉันอยู่ในรายการของ propertySources ภายใน EnviromentRepository
bean ที่ฉีดไปที่ EnvironmentController
ปัญหา: เมื่อฉันส่งคำขอ GET ไปที่ @RequestMapping("/{name}/{profiles}/{label:.*}")
(ใน EnvironmentController
) การฉีด EnviromentRepository
bean จะถูกนำมาใช้เพื่อค้นหาแหล่งที่มาของคุณสมบัติที่ร้องขอ (วิธี repository.findOne(name, profiles, label)
) ขออภัย ไม่พบแหล่งที่มาของทรัพย์สินของฉันที่นี่ ทำไม
ฉันใช้เวลามากในการแก้ไขข้อบกพร่องนี้ ฉันพบว่าการมอบหมายพื้นที่เก็บข้อมูล findOne()
วิธีการเรียกไปยังพื้นที่เก็บข้อมูลอื่น: MultipleJGitEnvironmentRepository
ซึ่งมอบหมายให้ NativeEnvironmentRepository
ภายในผู้รับมอบสิทธิ์นี้ เมธอด findOne() ไม่ได้ใช้ propertySources จาก EnviromentRepository
primary ที่ฉีดไปยังคอนโทรลเลอร์ สร้างพื้นที่เก็บข้อมูลสภาพแวดล้อมใหม่พร้อมรายการ PropertySources ใหม่และ SpringApplication ใหม่แยกกัน ในตอนท้าย รายการนี้ไม่มี CustomPropertySource
ของฉัน และนั่นคือสาเหตุที่ findOne()
ส่งคืน propertySources ว่างเปล่าในผลลัพธ์ Environment
วัตถุ
- ฉันทำอะไรผิดหรือเปล่า?
- ควรใช้
CustomPropertySourceLocator
(และ/หรือConsulPropertySourceLocator
) (autowired/bootstrapped) ในspring-cloud-config-server
หรือspring-cloud-config-client
- spring-cloud-config-server สามารถส่ง
PropertySources
ประเภทต่างๆ มากมายในเวลาเดียวกันผ่านอินเทอร์เฟซ REST ได้หรือไม่ (พูดว่า "แตกต่าง" ฉันหมายถึง Git, กงสุล และ Zookeeper ทั้งหมด)
EnvironmentRepository
bean อีกอันในบริบท จะไม่มีการสร้างEnvironmentRepository
bean เริ่มต้น ดังนั้นฉันสับสนเกี่ยวกับวิธีการสร้างMultipleJGitEnvironmentRepository
หรือNativeEnvironmentRepository
ในกรณีของคุณ คุณสามารถให้แอปตัวอย่างที่แสดงให้เห็นถึงปัญหาที่คุณพบอยู่ได้หรือไม่ - person Ryan Baxter   schedule 22.12.2016EnvironmentRepository
ฉีดไปที่EnvironmentController
ในตอนแรกEnvironmentEncryptorEnvironmentRepository
มอบหมายการโทรไปที่MultipleJGitEnvironmentRepository
ซึ่งสืบทอดการใช้งานจากAbstractScmEnvironmentRepository
FindOne() จากอันสุดท้ายทำให้ newNativeEnvironmentRepository
ผ่านConfigurableEnvironment
ซึ่งมีCustomPropertySource
ของฉันภายในbootstrapProperties
แหล่งที่มาของคุณสมบัติ ดูเหมือนว่าNativeEnvironmentRepository
จะกรองมันเนื่องจาก hardcoded --spring.cloud.bootstrap.enabled=false ในเมธอด getArgs() - person Marek Podyma   schedule 22.12.2016