Tujuan saya adalah menambahkan PropertySource khusus ke server cloud-spring. Apa yang ingin saya capai adalah mendapatkan beberapa properti khusus dari sumber khusus tersebut di aplikasi spring-cloud-config-client.
Berdasarkan saran dari Menambahkan repositori lingkungan di spring-config-server Saya telah membuat spring-cloud-config-server
aplikasi dan proyek terpisah spring-cloud-config-custom
. Yang kedua didasarkan pada spring-cloud -konsul-config kode. Jadi, saya telah membuat semua kelas yang diperlukan seperti CustomPropertySource
, CustomPropertySourceLocator
, CustomConfigBootstrapConfiguration
dan seterusnya dan mengonfigurasinya di spring.factories
.
Pada akhirnya, saya telah menambahkan ketergantungan maven ke spring-cloud-config-custom
di dalam spring-cloud-config-server
saya.
Sejauh ini bagus. Semuanya bekerja dengan baik. Ketika saya memulai server saya dapat melihat bahwa CustomPropertySource
saya ada di daftar propertySources di dalam EnviromentRepository
bean yang disuntikkan ke EnvironmentController
.
Masalah: Saat saya mengirim permintaan GET ke @RequestMapping("/{name}/{profiles}/{label:.*}")
(dalam EnvironmentController
), kacang EnviromentRepository
yang disuntikkan sedang digunakan untuk menemukan sumber properti yang diminta (metoderepository.findOne(name, profiles, label)
). Sayangnya sumber properti saya tidak dapat ditemukan di sini. Mengapa?
Saya telah menghabiskan banyak waktu untuk men-debug ini. Saya menemukan bahwa repositori mendelegasikan panggilan metode findOne()
ke repositori lain: MultipleJGitEnvironmentRepository
yang mendelegasikannya ke NativeEnvironmentRepository
. Di dalam delegasi ini, metode findOne() tidak menggunakan propertySources dari EnviromentRepository
primer yang disuntikkan ke pengontrol. Ini menciptakan repositori lingkungan baru dengan daftar PropertySources baru dan SpringApplication baru yang terpisah. Pada akhirnya, daftar ini tidak berisi CustomPropertySource
saya dan itulah sebabnya findOne()
mengembalikan propertySources kosong dalam objek Environment
yang dihasilkan.
- Apakah saya melakukan sesuatu yang salah?
- Apakah
CustomPropertySourceLocator
(dan/atauConsulPropertySourceLocator
) seharusnya digunakan (kabel otomatis/bootstrap) dispring-cloud-config-server
atauspring-cloud-config-client
- Bisakah spring-cloud-config-server mengirimkan berbagai jenis
PropertySources
secara bersamaan, melalui antarmuka REST (mengatakan "berbeda" maksud saya semua Git, Konsul, dan Zookeeper)?
EnvironmentRepository
kacang lain dalam konteksnya, tidak ada kacangEnvironmentRepository
default yang akan dibuat, jadi saya bingung tentang bagaimanaMultipleJGitEnvironmentRepository
atauNativeEnvironmentRepository
akan dibuat dalam kasus Anda. Bisakah Anda memberikan contoh aplikasi yang menunjukkan masalah yang Anda lihat? - person Ryan Baxter   schedule 22.12.2016EnvironmentRepository
disuntikkan keEnvironmentController
awalnyaEnvironmentEncryptorEnvironmentRepository
. Ini mendelegasikan panggilan keMultipleJGitEnvironmentRepository
yang mewarisi implementasi dariAbstractScmEnvironmentRepository
. FindOne() dari yang terakhir membuatNativeEnvironmentRepository
baru melewatiConfigurableEnvironment
yang berisiCustomPropertySource
saya di dalambootstrapProperties
sumber properti. TampaknyaNativeEnvironmentRepository
memfilternya karena hardcoded --spring.cloud.bootstrap.enabled=false dalam metode getArgs(). - person Marek Podyma   schedule 22.12.2016