2017-08-30 14 views
10

Mam więc plik application.yml dla mojej aplikacji rozruchowej sprężyny tak:Wiosna Konwencja Boot dla zmiennych

spring: 
    url: localhost 
email: 
    from: [email protected] 
app: 
    uuid: 3848348j34jk2dne9 

Chcę podłączyć te właściwości konfiguracji do różnych elementów w mojej aplikacji tak:

@Component 
public class FooA { 
    private final String url; 

    public FooA(@Value("${spring.url}") String url) { 
     this.url = url 
    } 
} 

@Component 
public class FooB { 
    private final String from; 

    public FooA(@Value("${email.from}") String from) { 
     this.from = from 
    } 
} 

@Component 
public class FooC { 
    private final String uuid; 

    public FooA(@Value("${app.uuid}") String uuid) { 
     this.uuid = uuid 
    } 
} 

Powyższe działa zgodnie z przeznaczeniem w mojej aplikacji. Ale moje pytanie brzmi, czy jest to najlepsza praktyka podczas wiosennego rozruchu. Jedyną inną alternatywą, o której wiem, jest użycie obiektu Properties poprzez utworzenie komponentu bean wewnątrz klasy konfiguracyjnej, załadowanie właściwości ze wszystkimi zmiennymi konfiguracyjnymi i zaimplementowanie komponentu bean właściwości do komponentów.

Jaka jest najlepsza praktyka w tym przypadku?

Odpowiedz

17

Po zidentyfikowaniu dwóch głównych opcji konfiguracji wstrzykiwania używa się @Value dla poszczególnych właściwości lub @ConfigurationProperties dla javabean obiektu konfiguracyjnego.

Który używasz sprowadza się do preferencji. Osobiście wolę używać obiektu konfiguracyjnego.

Za pomocą można użyć sprawdzania fasoli JSR-303.
Możesz także napisać własną, niestandardową weryfikację w ustawieniach twojego javabean, jeśli chcesz.
Możesz dodawać adnotacje do fasoli konfiguracyjnej z projektów innych niż wiosenne, co pozwala pisać biblioteki, które są łatwe do skonfigurowania, ale nie zależą od sprężyny.
Możesz generować metadane IDE z obiektów, które mogą sprawić, że proces programowania będzie bardziej płynny.

Oto kilka praktycznych zaleceń podczas korzystania z konfiguracji sprężyn.

  • Tworzenie indywidualnych @ConfigurationProperties obiekty dla elementów logicznych aplikacji. Staraj się zachować rzeczy modułowe i unikaj tworzenia zrzutu dla całej konfiguracji aplikacji.

  • Nie używaj tej samej właściwości @Value w wielu lokalizacjach.
    Jeśli ta sama konfiguracja jest wymagana w wielu miejscach w aplikacji, prawdopodobnie powinieneś przenieść tę wartość do obiektu konfiguracyjnego.
    Używanie tej samej właściwości w wielu adnotacjach @Value utrudnia rozumowanie, a także może spowodować nieoczekiwane zachowanie, jeśli zdefiniujesz wartość domyślną za pomocą wyrażenia "Spell" w jednym miejscu, a nie w drugim.

  • Nie definiuj swoich własnych właściwości w przestrzeni nazw spring.
    Na przykład Twoja własność spring.urlis not one of the properties defined in the documentation.
    Używając tej samej przestrzeni nazw, ryzykujesz, że ta nazwa będzie używana w przyszłych wersjach wiosennych.

+0

Nie sądzę, że Richard rozważał użycie "@ConfigurationProperties". Sposób, w jaki czytałem jego pytanie, rozważał utworzenie i wypełnienie fasoli ręcznie w jego klasie "Konfiguracja". Tak więc "@ConfigurationProperties" będzie wielką poprawą.Ponadto, jeśli dodasz procesor konfiguracji rozruchu sprężynowego, możesz wygenerować metadane konfiguracji dla IDE, do autouzupełniania/sprawdzania poprawności/dokumentacji, co jest całkiem fajne! –

Powiązane problemy