Kütüphanenin Spring Boot uygulama context'inin bilgilerini okuması

BeecoV

Kilopat
Katılım
18 Mayıs 2015
Mesajlar
186
Çözümler
2
Merhaba,

İki adet uygulamam var. A uygulamam bir kütüphane. Bu uygulamayı diğer mikroservislerime ekliyorum ve Interceptor olarak çalışıyor. A uygulamamda logging işlemine kibanada gösterebilmek adına bir field ekleme ihtiyacım var. Bunu StructuredArgument ile yapıyorum fakat, key olarak X, Value olarak spring. Application. Name bilgisini yollamam gerekiyor. Ben A uygulamasını B mikroservisine kütüphane olarak eklediğim zaman, B uygulamasının spring. Application. Name bilgisini alamıyorum. @Value ile denedim, Enviroment ile denedim, System. GetProperty ile denedim fakat olmuyor. ComponentScan ile yapılabilir diye duydum fakat nasıl yapmam gerektiğini bilmiyorum. Bu şekilde almak istememin sebebi de, A kütüphanesini kullanan birçok mikroservisim var ve hepsinde değişiklik yapmak istemiyorum. Kütüphanede değişiklik yapıp patch versiyon arttırıp işi bitirmek istiyorum. Tavsiye ve yardımlarınızı bekliyorum.
 
Son düzenleyen: Moderatör:
Bir şeyi yanlış ya da eksik yapıyor olmalısınız. Mesela ben şimdi çalışacak servisimde (sizdeki B gibi) ilgili bootstrap.yml içinde

Kod:
spring:
  application:
    name: isim

diye application name set edilmiş durumda.

Kütüphane olarak kullanılan servisimde (sizdeki A), bir sınıfın başına

Kod:
@Value("${spring.application.name}")
private String serviceId;

diye app name değerini tanımladım, bu sınıftaki bir methodda da

Kod:
String s = serviceId;

diye erişmek istedim.

Çalışacak (B) servisimi ayağa kaldırdığımda ve kütüphane olan servisin (A) ilgili yerine eriştiğimde B servisinin adını alabiliyorum. Projelerinizi gözden geçirin.
 
Bir şeyi yanlış ya da eksik yapıyor olmalısınız. Mesela ben şimdi çalışacak servisimde (sizdeki B gibi) ilgili bootstrap.yml içinde

Kod:
spring:
  application:
    name: isim

diye application name set edilmiş durumda.

Kütüphane olarak kullanılan servisimde (sizdeki A), bir sınıfın başına

Kod:
@Value("${spring.application.name}")
private String serviceId;

diye app name değerini tanımladım, bu sınıftaki bir methodda da

Kod:
String s = serviceId;

diye erişmek istedim.

Çalışacak (B) servisimi ayağa kaldırdığımda ve kütüphane olan servisin (A) ilgili yerine eriştiğimde B servisinin adını alabiliyorum. Projelerinizi gözden geçirin.
Spring.application.name değeri B'de tanımlı durumda aslında.

Kod:
@Value("${spring.application.name}")
private String serviceId;
kodu ile değer null geliyor. Inject edildiği uygulamanın yaml dosyasını okuyamıyor.

Kod:
@Value("\${spring.application.name}")
private val applicationName: String? = null

Kotlinde bu şekilde kullanıyorum fakat B uygulamasında debug ettiğimde dediğim gibi null değer geliyor.
 
@count hocam aspect ekledim de yine aynı okunmadı, mecbur uygulamaları tek tek güncelledim. Forward compatibility için uğraştım da, napalım artık. Teşekkür ediyorum.
 

Geri
Yukarı