Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2
A lightweight and extensible library to resolve application properties from various external sources.
License
joel-jeremy/externalized-properties
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A lightweight and extensible library to resolve application properties from various external sources.
Please consider giving the repository a ⭐. It means a lot! Thank you :)
Externalized Properties was inspired by theThe Twelve Factor Methodology's sectionIII. Config.
The goal of this library is to make it easy for applications to implement configuration best practices by providing easy-to-use APIs as well as providing the flexibility to choose where to store their configurations/properties.
implementation"io.github.joel-jeremy.externalized-properties:externalized-properties-core:${version}"// Optional/additional resolversimplementation"io.github.joel-jeremy.externalized-properties:externalized-properties-database:${version}"implementation"io.github.joel-jeremy.externalized-properties:externalized-properties-git:${version}"
<dependency> <groupId>io.github.joel-jeremy.externalized-properties</groupId> <artifactId>externalized-properties-core</artifactId> <version>${version}</version></dependency><!-- Optional/additional resolvers--><dependency> <groupId>io.github.joel-jeremy.externalized-properties</groupId> <artifactId>externalized-properties-database</artifactId> <version>${version}</version></dependency><dependency> <groupId>io.github.joel-jeremy.externalized-properties</groupId> <artifactId>externalized-properties-git</artifactId> <version>${version}</version></dependency>
Externalized Properties jars are published with Automatic-Module-Name manifest attribute:
- Core -
io.github.joeljeremy.externalizedproperties.core - Database Resolver -
io.github.joeljeremy.externalizedproperties.database - Git Resolver -
io.github.joeljeremy.externalizedproperties.git
Module authors can use above module names in their module-info.java:
modulefoo.bar {requiresio.github.joeljeremy.externalizedproperties.core;requiresio.github.joeljeremy.externalizedproperties.database;requiresio.github.joeljeremy.externalizedproperties.git;}
Externalized Properties takes full advantage of Java'sDynamic Proxies (Why Dynamic Proxies?).
- Map Properties to (Java Dynamic Proxy) Interface Methods
- Default/Fallback Values
- Support for Property Names Known at Runtime
- Support for Various Configuration File/Resource Formats
- Caching
- Eager Loading
- Custom Resolvers
- Automatic Property Conversion
- Conversion to Generic Types
- Conversion of Arbitrary Values
- Custom Converters
- Automatic Variable Expansion in Property Names
- Automatic Variable Expansion in Properties
- Variable Expansion in Arbitrary Values
Properties are mapped to proxy interface methods by using the@ExternalizedProperty annotation.
(For more advanced scenarios, please see the feature documentations.)
Given an interface:
publicinterfaceApplicationProperties {@ExternalizedProperty("java.home")StringjavaHome();@ExternalizedProperty("encrypted.property")@Decrypt("MyDecryptor")StringencryptedProperty();@ExternalizedProperty("java.version")intjavaVersion();}
We can initialize and start resolving external configurations/properties by:
publicstaticvoidmain(String[]args) {// 1. Configure and build the ExternalizedProperties instance.ExternalizedPropertiesexternalizedProperties =buildExternalizedProperties();// 2. Initialize a proxy using the ExternalizedProperties.ApplicationPropertiesprops =externalizedProperties.initialize(ApplicationProperties.class);// 3. Resolve the properties.StringjavaHome =props.javaHome();StringencryptedProperty =props.encryptedProperty();intjavaVersion =props.javaVersion();}privatestaticExternalizedPropertiesbuildExternalizedProperties() {returnExternalizedProperties.builder() .defaults() .resolvers(...) .processors(...) .converters(...) .build();}
More sample can be found here:https://github.com/joel-jeremy/externalized-properties-samples
About
A lightweight and extensible library to resolve application properties from various external sources.
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.