Jak korzystać z application.properties w zwykłej klasie?

0

Cześć, wszystko w uproszczeniu. Mam klasę, która nie jest beanem.

public class NotBean implements NotBeanInterface {

   @Override
   public void relevantMethod() {
      System.out.println(Config.CONSTANT); // some value, enum or static
   }
}

Korzystam z niej np. tak:

@Service
public class FooBean {

  public void foo() {
    new NotBean().relevantMethod();
  }
}

Okazuje się, że mój Config.CONSTANT różni się w zależności od środowiska. Na prodzie może mieć wartość 10, a gdzieś indziej 20.

Jak sobie z tym poradzić? Chciałbym do wyciągnąć do application.properties i korzystać z @Value, ale NotBean nie jest fasolą springową.

1

Najprościej chyba przekazać wartość do metody relevantMethod z poziomu beana który używa tej klasy (tam możesz wstrzyknąć swoje property). Ewentualnie możesz stworzyć beana NotBeanFactory który będzie tworzył instancje NotBean ze wstrzykniętą wartością property. Oczywiście możesz ręcznie bawić się w ładowanie properties ale byłoby to duplikowanie tego co robi już Spring (pewnie musiałbyś i tak jakoś wykrywać w jakim środowisku jesteś jeśli masz inne pliki konfiguracyjne per środowisko, np. application-dev.properties, application-prod.properties)

2
  1. Moim zdaniem uzywanie @Value jest slabe. Lepiej wczytaj wszystkie konfiguracyjne properties do klasy z @ConfigurationProperties i jej uzywac.
  2. Ostatnio zadalem podobne pytanie: https://4programmers.net/Forum/Java/349767-uzywanie_at_configurationproperties_w_spring?p=1748989#id1748989
3
nut napisał(a):
  1. Moim zdaniem uzywanie @Value jest slabe. Lepiej wczytaj wszystkie konfiguracyjne properties do klasy z @ConfigurationProperties i jej uzywac.

Wypowiem się jako człowiek żyjący poza springiem. Dla mnie normalne jest że konfiguracje gdzieś tam na początku się wczytuje, a potem przekazuje w konstruktorach do potrzebnych klas

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.