Injicer arrays og lister fra Spring Properties-filer

1. Oversigt

I denne hurtige vejledning skal vi lære at indsætte værdier i en matrix eller Liste fra en Spring egenskabsfil.

2. Standardadfærd

Vi starter med et simpelt application.properties fil:

arrayOfStrings = Baeldung, dot, com

Lad os se, hvordan Spring opfører sig, når vi indstiller vores variabeltype til Snor[]:

@Value ("$ {arrayOfStrings}") privat streng [] arrayOfStrings;
@Test ugyldigt nårContextIsInitialized_thenInjectedArrayContainsExpectedValues ​​() {assertEquals (ny streng [] {"Baeldung", "dot", "com"}, arrayOfStrings); }

Vi kan se, at Spring antager korrekt, at vores afgrænser er et komma og initialiserer arrayet i overensstemmelse hermed.

Vi skal også bemærke, at indsprøjtning af en matrix som standard kun fungerer korrekt, når vi har kommaseparerede værdier.

3. Injicering af lister

Hvis vi prøver at injicere en Liste på samme måde får vi et overraskende resultat:

@Value ("$ {arrayOfStrings}") privat liste uventet ListOfStrings;
@Test ugyldigt nårContextIsInitialized_thenInjectedListContainsUnexpectedValues ​​() {assertEquals (Collections.singletonList ("Baeldung, dot, com"), uventetListOfStrings); }

Vores Liste indeholder et enkelt element, der er lig med den værdi, vi indstiller i vores egenskabsfil.

For korrekt at injicere en Liste, skal vi bruge en særlig syntaks kaldet Spring Expression Language (SpEL):

@Value ("# {'$ {arrayOfStrings}'. Split (',')}") privat liste listOfStrings;
@Test ugyldigt nårContextIsInitialized_thenInjectedListContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }

Vi kan se, at vores udtryk starter med # i stedet for $ som vi er vant til @Værdi.

Vi skal også bemærke, at vi påkalder en dele metode, som gør udtrykket lidt mere komplekst end en almindelig injektion.

Hvis vi gerne vil have vores udtryk lidt enklere, kan vi erklære vores ejendom i et specielt format:

listOfStrings = {'Baeldung', 'dot', 'com'}

Foråret genkender dette format, og vi kan injicere vores Liste ved hjælp af et noget enklere udtryk:

@Value ("# {$ {listOfStrings}}") privat liste listOfStringsV2;
@Test ugyldigt nårContextIsInitialized_thenInjectedListV2ContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsV2); }

4. Brug af brugerdefinerede afgrænsere

Lad os oprette en lignende egenskab, men denne gang bruger vi en anden afgrænser:

listOfStringsWithCustomDelimiter = Baeldung; punkt; com

Som vi har set, når vi injicerer Lister, kan vi bruge et specielt udtryk, hvor vi kan specificere vores ønskede afgrænser:

@Value ("# {'$ {listOfStringsWithCustomDelimiter}'. Split (';')}") privat liste listeOfStringsWithCustomDelimiter;
@Test ugyldigt nårContextIsInitialized_thenInjectedListWithCustomDelimiterContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsWithCustomDelimiter); }

5. Injektion af andre typer

Lad os se på følgende egenskaber:

listOfBooleans = false, false, true listOfIntegers = 1,2,3,4 listOfCharacters = a, b, c

Vi kan se, at Spring understøtter grundlæggende typer out-of-the-box, så vi behøver ikke foretage nogen speciel parsing:

@Value ("# {'$ {listOfBooleans}'. Split (',')}") privat liste listOfBooleans; @Value ("# {'$ {listOfIntegers}'. Split (',')}") privat liste listOfIntegers; @Value ("# {'$ {listOfCharacters}'. Split (',')}") privat liste listOfCharacters;
@Test ugyldigt nårContextIsInitialized_thenInjectedListOfBasicTypesContainsExpectedValues ​​() {assertEquals (Arrays.asList (false, false, true), listOfBooleans); assertEquals (Arrays.asList (1, 2, 3, 4), listOfIntegers); assertEquals (Arrays.asList ('a', 'b', 'c'), listOfCharacters); }

Dette understøttes kun via SpEL, så vi kan ikke indsprøjte en matrix på samme måde.

6. Læsning af egenskaber programmatisk

For at kunne læse egenskaber programmatisk skal vi først få forekomsten af ​​vores Miljø objekt:

@Autowired privat miljø miljø;

Derefter kan vi simpelthen bruge getProperty metode til at læse enhver egenskab ved at specificere dens nøgle og forventede type:

@Test ugyldigt nårReadingFromSpringEnvironment_thenPropertiesHaveExpectedValues ​​() {String [] arrayOfStrings = environment.getProperty ("arrayOfStrings", String []. Class); List listOfStrings = (List) environment.getProperty ("arrayOfStrings", List.class); assertEquals (ny streng [] {"Baeldung", "dot", "com"}, arrayOfStrings); assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }

7. Konklusion

I denne hurtige vejledning har vi lært, hvordan man let injicerer arrays og Listes gennem hurtige og praktiske eksempler.

Som altid er koden tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found