Bir Spring uygulaması başlatıldıktan sonra Spring konfigürasyonunu değiştirdiğimizde önceden @Autowired edilmiş nesneler nasıl güncellenir?

GenericApplicationContext context = new GenericApplicationContext();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(context);
reader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
context.refresh();

myApplicationContextAware.setApplicationContext(context);

Şeklinde bir konfigürasyon değiştirme metodu yazdım, ancak uygulamanın içindeki tüm @Autowired nesneleri eski konfigürasyondaki değerlerini koruyor,

myApplicationContextAware.applicationContext.getBean(MyClass.class) ile yeni konfigürasyonun geçerli olduğu nesne üretebiliyorum ancak bunu tüm projeye uygulayamam, bu nesneleri tekrar güncelleyebileceğim başka bir yol var mı?

soruldu: 08 Nis, 05:20

pvalue's gravatar image

pvalue
5571310
cevap kabul oranı: 17%


Sorunu iki farklı şekilde çözmüştüm, aynı sorunu yaşayanlar açısından çözümlerimi buraya ekliyorum:

Çözüm 1:

Uygulamanın uygunluğuna göre (mesela uygulamanın ilk kurulum ve yapılandırma aşamaları için) önce sadece geçici konfigürasyon ile oluşacak nesneler inject edilip diğerleri için konfigürasyon değişince ilklendirme yapılabilir.

İstenilen Spring nesnelerini lazy yapıp, uygulama başlarken değil, nesne ilk kullanıldığı zaman inject ediliyor.

@Lazy @Component (class seviyesinde)

@Lazy @Autowired (property seviyesinde)


Çözüm 2:

@RefreshScope ile beanlerin scope yapısını değiştirip, nesneler yeni konfigürasyon doğrultusunda yeniden güncellenebilir. Bunun için Spring Boot gerekiyor.

permanent link

cevaplandı: 02 May, 06:29

pvalue's gravatar image

pvalue
5571310
cevap kabul oranı: 17%

değiştirildi: 03 May, 08:55

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×128
×5
×2
×2

Soruldu: 08 Nis, 05:20

Görüntüleme: 324 kez

Son güncelleme: 03 May, 08:55

powered by BitNami OSQA