27 Nisan 2020 Pazartesi

SpringContext @PropertySource Anotasyonu - Farklı Bir Properties Dosyası Okuma

Giriş
Şu satırı dahil ederiz.
import org.springframework.context.annotation.PropertySource;
Bu anotasyon ile application.properties dosyasından farklı bir ".properties" uzantılı dosyaları otomatik olarak sınıftaki değişkenlere atamak mümkün.

Sınıftaki değişkenlere değer atamak için 3 yol var
1. Değişken @Value anotasyonu ile işaretlenir
2. Sınıfa Environment nesnesi @Autowired edilir. Daha sonra bu nesneden istediğimiz değerleri alırız.
3. Sınıf @ConfigurationProperties olarak işaretlenir. Bu durumda POJO olarak okunur. Tüm alanlar private yapılır ve getter()/setter() metodlar tanımlanır.

factory Alanı
Bu sınıf normalde yml uzantılı dosyaları okumuyor. Yml dosyalarını okutmak için şöyle yaparız.
@PropertySource("classpath:/routing.yml", factory = YamlPropertyLoaderFactory.class)
value Alanı
Dosyanın yolunu belirtir.

Örnek - classpath'teki Properties Dosyası
Elimizde şöyle bir sınıf olsun
@Component
@Configuration
@ConfigurationProperties("test")
@PropertySource("classpath:test.properties")
public class DemoProperties {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}
test.properties şöyle olsun
test.name=myNameGood
Örnek - classpath'teki Properties Dosyası
Çoklu dosya kullanmak için şöyle yaparız. Bu kullanım yerine @PropertySources anotasyonu da kullanılabilir.
@PropertySource("classpath:foo.properties")
@PropertySource("classpath:bar.properties")
public class PropertiesWithJavaConfig {
    //...
}
Örnek - file
Şöyle yaparız.
@PropertySource("file:${MDHIS_HOME}/config.properties")
Örnek - file
Şöyle yaparız.
@Configuration
@PropertySource("file:/etc/foo/application.properties")
public class Config 
{
  @Autowired
  private Environment env;

  @Bean
  public static PropertySourcesPlaceholderConfigurer configurer() {
    return new PropertySourcesPlaceholderConfigurer();
  }

  @Value("${socmess.pass}")
  private String pass;

  public String getUser() {
    return env.getProperty("socmess.user");
  }

  public String getPass() {
    return pass;
  }
}
Dosyanın içi şöyledir
$ cat /etc/foo/application.properties 
socmess.user="testuser"
socmess.pass="testpass"

Hiç yorum yok:

Yorum Gönder