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.