Spring Properties File Buitenpot

1. Overzicht

Eigenschappenbestanden zijn een veelgebruikte methode die we kunnen gebruiken om projectspecifieke informatie op te slaan. Idealiter zouden we het buiten de verpakking moeten houden om wijzigingen in de configuratie aan te kunnen brengen als dat nodig is.

In deze korte tutorial zullen we verschillende bekijken manieren om het eigenschappenbestand te laden vanaf een locatie buiten de jar in een Spring Boot-applicatie.

2. De standaardlocatie gebruiken

Volgens afspraak zoekt Spring Boot naar een extern gemaakt configuratiebestand - toepassing. eigendommen of application.yml - op 4 vooraf bepaalde locaties in de volgende volgorde van prioriteit:

  • EEN / config submap van de huidige map
  • De huidige directory
  • Een klassenpad / config pakket
  • Het classpath root

Daarom een eigenschap gedefinieerd in application.properties en geplaatst in de / config submap van de huidige map wordt geladen. Dit zal ook eigendommen op andere locaties overschrijven in geval van een botsing.

3. Met behulp van de opdrachtregel

Als de bovenstaande conventie niet voor ons werkt, kunnen we dat ook configureer de locatie rechtstreeks op de opdrachtregel:

java -jar app.jar --spring.config.location = file: ///Users/home/config/jdbc.properties

We kunnen ook een maplocatie doorgeven waar de applicatie naar het bestand zal zoeken:

java -jar app.jar --spring.config.name = applicatie, jdbc --spring.config.location = file: /// Users / home / config

En een alternatieve benadering is het uitvoeren van de Spring Boot-applicatie via de Maven-plug-in. Daar kunnen we een -D parameter:

mvn spring-boot: run -Dspring.config.location = "file: ///Users/home/jdbc.properties"

4. Omgevingsvariabelen gebruiken

Of, laten we zeggen dat we de opstartopdracht niet kunnen wijzigen. Wat geweldig is, is Spring Boot leest ook de omgevingsvariabelen SPRING_CONFIG_NAME en SPRING_CONFIG_LOCATION:

export SPRING_CONFIG_NAME = applicatie, jdbc export SPRING_CONFIG_LOCATION = file: /// Users / home / config java -jar app.jar

Merk op dat het standaardbestand nog steeds wordt geladen. Maar in het geval van een aanrijding met eigendommen, het omgevingsspecifieke eigenschappenbestand heeft voorrang.

5. Programmatisch

Of, als we programmatische toegang willen, kunnen we een PropertySourcesPlaceholderConfigurer Boon:

openbare PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer () {PropertySourcesPlaceholderConfigurer-eigenschappen = nieuwe PropertySourcesPlaceholderConfigurer (); properties.setLocation (nieuwe FileSystemResource ("/ Users / home / conf.properties")); properties.setIgnoreResourceNotFound (false); eigenschappen teruggeven; }

Hier hebben we gebruikt PropertySourcesPlaceholderConfigurer om de eigenschappen vanaf een aangepaste locatie te laden.

6. Een bestand uitsluiten van de vetpot

De Maven Boot-plug-in zal automatisch alle bestanden in het src / main / resources directory naar het jar-pakket.

Als we niet willen dat een bestand deel uitmaakt van de jar, kunnen we een eenvoudige configuratie uitvoeren om het uit te sluiten:

   src / main / resources true ** / conf.properties 

In dit voorbeeld hebben we de conf.eigenschappen bestand wordt opgenomen in de resulterende jar.

7. Conclusie

Zoals we kunnen zien, zorgt het Spring Boot-framework zelf voor de externe configuratie voor ons.

Vaak hoeven we alleen de eigenschapswaarden in de juiste bestanden en locaties te plaatsen, maar we kunnen ook de Java-API van Spring gebruiken voor meer controle.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.