Modern configuration library for distributed apps written in Java.

Related tags

Configuration cfg4j
Overview

Twitter Follow Documentation Examples Maven Central JavaDoc GitHub license Travis

Overview

cfg4j ("configuration for Java") is a configuration library for Java distributed apps (and more).

Features:

  • Open source
  • Easy to use
  • Auto-reloads configuration
  • Powerful configuration mechanisms (interface binding, multi-source support with fallback strategy, merging, ...)
  • Distributed-environment friendly ( caching, support for multiple environments [test, preprod, prod], ...)
  • Reads configuration from: Consul, Git repos (YAML and/or properties), Files, Classpath, ...
  • Modern design
    • Seamless integration with DI containers: Spring, Guice and others
    • Exposes performance metrics by integration with Metrics library
    • Extensible (see the list of plugins below)
    • Heavily tested (99% code coverage)
    • Well documented
    • Java 8+ required

Usage

Read an article about configuration management using cfg4j.

Detailed documentation

Head to the documentation.

Sample apps

Explore the code of the sample apps.

Quick start

Setting up dependency

Gradle

dependencies {
  compile group: "org.cfg4j", name:"cfg4j-core", version: "4.4.1"
  
  // For Consul integration
  compile group: "org.cfg4j", name:"cfg4j-consul", version: "4.4.1"
  
  // For git integration
  compile group: "org.cfg4j", name:"cfg4j-git", version: "4.4.1"
}

Maven

<dependencies>
  <dependency>
    <groupId>org.cfg4j</groupId>
    <artifactId>cfg4j-core</artifactId>
    <version>4.4.1</version>
  </dependency>
  <!-- For Consul integration -->
  <dependency> 
    <groupId>org.cfg4j</groupId>
    <artifactId>cfg4j-consul</artifactId>
    <version>4.4.1</version>
  </dependency>
  <!-- For git integration -->
  <dependency>
    <groupId>org.cfg4j</groupId>
    <artifactId>cfg4j-git</artifactId>
    <version>4.4.1</version>
  </dependency>
</dependencies>

Usage

The fastest way to start working with cfg4j is to use a Git repository as a configuration store. To do that follow the steps:

  • Use the following code in your application to connect to sample configuration source:
public class Cfg4jPoweredApplication {

  // Change this interface to whatever you want
  public interface SampleConfig {
    Integer birthYear();
    List<String> friends();
    URL homepage();
    Map<String, Character> grades();
  }

  public static void main(String... args) {
    ConfigurationSource source = new GitConfigurationSourceBuilder()
      .withRepositoryURI("https://github.com/cfg4j/cfg4j-git-sample-config.git")
      .build();
      
    ConfigurationProvider provider = new ConfigurationProviderBuilder()
      .withConfigurationSource(source)
      .build();
    
    SampleConfig config = configurationProvider.bind("reksio", SampleConfig.class);
    
    // Use it!
    System.out.println(config.homepage());
  }

}
  • Optional steps
    1. Fork the configuration sample repository.
    2. Add your configuration to the "application.properties" file and commit the changes.
    3. Update the code above to point to your fork.

License

Licensed under the Apache License, Version 2.0. See LICENSE file.

Comments
  • Remove initialized=false if a configuration fails to load

    Remove initialized=false if a configuration fails to load

    In some cases the key value fetch fails, due to consul being down for a few seconds, or the connection failing, in which case this flag is set to false. If it is set to false, the getConfiguration() method keeps on throwing IllegalStateExceptions, bringing our entire application down.

    I think the purpose of the initialized flag was to to prevent getConfiguration() being called before init() completed, and hence setting the flag here is not needed.

    opened by akonsand 6
  • You can't use ClasspathConfigurationSource without an environment within a JAR

    You can't use ClasspathConfigurationSource without an environment within a JAR

    We package up a Java application into a fat JAR that contains all the application source code and the dependencies. This allows the application to be run as java -jar myapp.jar, however when doing this if I attempt to load a ClasspathConfigurationSource without having an environment set it blows up with:

    Caused by: org.cfg4j.source.context.environment.MissingEnvironmentException: Missing environment: Directory doesn't exist: 
        at org.cfg4j.source.classpath.ClasspathConfigurationSource.getConfiguration(ClasspathConfigurationSource.java:109)
        at org.cfg4j.source.compose.MergeConfigurationSource.getConfiguration(MergeConfigurationSource.java:62)
        at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:91)
        at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:64)
    

    When running unpacked (from IDE) it all works correctly. Specifying and environment also fixes the problem, but this affects other configurations sources (EnvironmentVariablesConfigurationSource) and so I'd rather keep the environment empty.

    bug 
    opened by buckett 5
  • Error in http://www.cfg4j.org/ Quick Start. (Cfg4jPoweredApplication)

    Error in http://www.cfg4j.org/ Quick Start. (Cfg4jPoweredApplication)

    INFO( org.cfg4j.provider.ConfigurationProviderBuilder.build(ConfigurationProviderBuilder.java:135) ) - Initializing ConfigurationProvider with org.cfg4j.source.git.GitConfigurationSource source, org.cfg4j.source.reload.strategy.PeriodicalReloadStrategy reload strategy and org.cfg4j.source.context.environment.DefaultEnvironment environment INFO( org.cfg4j.source.git.GitConfigurationSource.init(GitConfigurationSource.java:128) ) - Initializing class org.cfg4j.source.git.GitConfigurationSource pointing to https://github.com/cfg4j/cfg4j-git-sample-config.git Exception in thread "main" java.lang.IllegalStateException: Can't bind method friends at org.cfg4j.validator.BindingValidator.validate(BindingValidator.java:65) at org.cfg4j.provider.SimpleConfigurationProvider.bind(SimpleConfigurationProvider.java:128) at org.cfg4j.provider.SimpleConfigurationProvider.bind(SimpleConfigurationProvider.java:106) at com.synnex.conf.Cfg4jPoweredApplication.main(Cfg4jPoweredApplication.java:33) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.cfg4j.validator.BindingValidator.validate(BindingValidator.java:51) ... 3 more Caused by: org.cfg4j.source.context.environment.MissingEnvironmentException: Missing environment: at org.cfg4j.source.git.GitConfigurationSource.getConfiguration(GitConfigurationSource.java:99) at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:91) at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:76) at org.cfg4j.provider.BindInvocationHandler.invoke(BindInvocationHandler.java:61) at com.sun.proxy.$Proxy0.friends(Unknown Source) ... 8 more Caused by: org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/master can not be resolved at org.eclipse.jgit.api.CreateBranchCommand.getStartPointObjectId(CreateBranchCommand.java:282) at org.eclipse.jgit.api.CreateBranchCommand.call(CreateBranchCommand.java:135) at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:220) at org.cfg4j.source.git.GitConfigurationSource.checkoutToBranch(GitConfigurationSource.java:179) at org.cfg4j.source.git.GitConfigurationSource.getConfiguration(GitConfigurationSource.java:97) ... 12 more

    opened by seaward 5
  • No support for JVM properties and environment variables

    No support for JVM properties and environment variables

    Hi.

    I couldn't find any documentation reference for including JVM properties and good old environment variables as configuration source. Due to the popularization of Docker philosophy and 12-factor application concept it would be quite nice to provide library users with simple way to use both sources in their apps. I've already found a workaround with InMemoryConfigurationSource (and i know that documentation will become confusing the very moment it will specify word 'environment' in two meanings), however, i feel that is necessary to update library in that way (or at least mention InMemoryConfigurationSource workaround in documentation).

    enhancement 
    opened by etki 5
  • Simplify ConfigurationSource (remove reload() method) and add caching layer

    Simplify ConfigurationSource (remove reload() method) and add caching layer

    TL;DR:

    • fixes #147
    • allows performance improvements like #144, #145

    Summary: I'm making a backward-incomatible (hence version 5.0.0) change altering the the ConfigurationSource contract. Here's the idea and the reasoning behind it.

    So far each configuration source had to guarantee that between two consecutive calls to the reload() method the result of getConfiguration(Environment) call will not change. This assumption had few side effects:

    • it was hard to fetch only a subset of configuration that was represented by the environment passed to the getConfiguration(Environment) since reload() method was not aware of it. For scenarios when the whole configuration set is large and the subset represented by environment was small there was significant and unnecessary overhead during reload(). See isse #144.
    • each configuration source had to deal with caching configuration between calls to the reload() method
    • it made implementing FallbackConfigurationSource properly tricky

    Also it feels like configuration sources shouldn't deal with reloading since they sole responsibility was to to hide the storage-layer details behind a uniform interface.

    So, now the change :) The ConfigurationSource interface does not extend the Reloadable interface anymore. Instead I introduced a CachedConfigurationSource that is responsible for caching the results from any other configuration source. It's now being used by default by the ConfigurationProviderBuilder to wrap the source that was passed by a user.

    enhancement 
    opened by norbertpotocki 4
  • NoSuchMethodError: javax.ws.rs.core.Response.close()V during execution

    NoSuchMethodError: javax.ws.rs.core.Response.close()V during execution

    Attempting to run a JUnit test I'm getting a NoSuchMethodError: javax.ws.rs.core.Response.close()V error. Looking into it, it seems like there are some deviations in the difference packages providing the Response object.

    https://issues.apache.org/jira/browse/BROOKLYN-154

    While a different project, the above explains the issue in more details. Essentially, I'm trying to integrate and then test the cfg4j-consul module similarly to the way the example is stood up.

    java.lang.NoSuchMethodError: javax.ws.rs.core.Response.close()V at com.orbitz.consul.AgentClient.ping(AgentClient.java:77) at com.orbitz.consul.Consul.<init>(Consul.java:73) at com.orbitz.consul.Consul.<init>(Consul.java:24) at com.orbitz.consul.Consul$Builder.build(Consul.java:337) at org.cfg4j.source.consul.ConsulConfigurationSource.init(ConsulConfigurationSource.java:101) at org.cfg4j.provider.ConfigurationProviderBuilder.build(ConfigurationProviderBuilder.java:142) at com.test.studio.common.configuration.ConfigBeans.testConfigurationProvider(ConfigBeans.java:59) at com.test.studio.common.configuration.MemcachedConfigTest.test(MemcachedConfigTest.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

    opened by mhradek 2
  • Make ConsulConfigurationSource a public class

    Make ConsulConfigurationSource a public class

    ConsulConfigurationSource is package private but it is the return value of the public function, ConsulConfigurationSourceBuilder::build. This causes problems when using kotlin b/c kotlin cannot assign any variable to type ConsulConfigurationSource since it is package private. Since ConsulConfigurationSourceBuilder::build returns an instance of ConsulConfigurationSource, we should make ConsulConfigurationSource a public class.

    opened by shudas 2
  • Missing non-String YAML properties

    Missing non-String YAML properties

    Hi, I'd like to make sure this is an issue and I'm not missing something before submitting a PR. org.yaml.snakeyaml.Yaml supports loading non-String properties, the canonical case being Integers. YamlBasedPropertiesProvider in turn, loads these properties into a Properties object which is a String only construct (Properties discourages putAll calls for this reason). The result is that when trying to call getProperty() for a non-String property, null is returned.

    opened by roded 2
  • Expose the established Consul connection in ConsulConfigurationSource

    Expose the established Consul connection in ConsulConfigurationSource

    Just wondering if you had any concerns or thoughts about exposing https://github.com/cfg4j/cfg4j/blob/master/cfg4j-consul/src/main/java/org/cfg4j/source/consul/ConsulConfigurationSource.java#L100 to be retrieved and used.

    I figured it might be useful for use cases where you want a Consul client connection for something else, and you might as well use the one already established by cfg4j instead of making a new one.

    wontfix 
    opened by fromanator 2
  • TempConfigurationFileRepo class missing in jar

    TempConfigurationFileRepo class missing in jar

    I can find in test classes following code: fileRepo = new TempConfigurationFileRepo("org.cfg4j-test-repo");

    But the class doesn't exists in library itself, any hints? I mostly work with maven, so maybe its time what gradle can do: image

    opened by archenroot 1
  • Make ConsulConfigurationSource public

    Make ConsulConfigurationSource public

    ConsulConfigurationSource is package private but it is the return value of the public function, ConsulConfigurationSourceBuilder::build. This causes problems when using kotlin b/c kotlin cannot assign any variable to type ConsulConfigurationSource since it is package private. Since ConsulConfigurationSourceBuilder::build returns an instance of ConsulConfigurationSource, we should make ConsulConfigurationSource a public class.

    opened by shudas 1
  • Please add maintainers to this project

    Please add maintainers to this project

    @norbertpotocki can you please add some maintainers to this project so that they can merge some of the pull requests and breathe some new life into the project? It is very useful and I don't think there is any good reason why it has to die.

    CC: @majkiw @akonsand @buckett @pimlock

    opened by aucampia 1
  • Lib is flooding root file system

    Lib is flooding root file system

    The proj I'm working on is using the lib into automation test suits. Tests are being run by Jenkins and Jenkins being hosted on a bare metal. From time to time I'm facing with IOException: No space left on device It appears the lib is flooding /tmp directory with numerous of config file repo clones, e.g.:

    jenkins@jenkinsmaster01:~$ ls -ld /tmp/cfg*
    drwxr-xr-x 4 jenkins jenkins 4096 May 23 00:21 /tmp/cfg4j-git-config-repository1196432648052804977
    drwxr-xr-x 3 jenkins jenkins 4096 May 19 17:36 /tmp/cfg4j-git-config-repository1210794336978573061
    ...
    'a lot of same directories goes here'
    ...
    

    Here's the place where the path being initialized: https://github.com/cfg4j/cfg4j/blob/47d4f63e5fc820c62631e557adc34a29d8ab396d/cfg4j-git/src/main/java/org/cfg4j/source/git/GitConfigurationSourceBuilder.java#L58 https://github.com/cfg4j/cfg4j/blob/47d4f63e5fc820c62631e557adc34a29d8ab396d/cfg4j-git/src/main/java/org/cfg4j/source/git/GitConfigurationSourceBuilder.java#L59

    Each run new randomly named dir is created and NOT being cleared after: https://github.com/cfg4j/cfg4j/blob/47d4f63e5fc820c62631e557adc34a29d8ab396d/cfg4j-git/src/main/java/org/cfg4j/source/git/GitConfigurationSource.java#L140

    I have a feeling this was intended to clear old copies, but in fact it doesn't as each time new random long is being appended to the path and old dirs is not deleted. https://github.com/cfg4j/cfg4j/blob/47d4f63e5fc820c62631e557adc34a29d8ab396d/cfg4j-git/src/main/java/org/cfg4j/source/git/GitConfigurationSource.java#L142

    Given above:

    1. I believe it is must for documentation to mention that repo would be cloned to System temp directory and furthermore I believe the directory should be configurable, as a workaround I'm passing: -Djava.io.tmpdir={not-root/custom tmp dir} to java.
    2. Code should be updated so it would clear all the leftovers after its execution.
    opened by kamurashev 1
  • feature git authentication implemented

    feature git authentication implemented

    I am not able to write test cases as local git I am not able to create authentication. If you have any suggestions how to write please let me know. We have tested and used in our organization with GitLab oauth2 token it is working fine.

    opened by mrpenchu 1
  • ConcurrentModificationException in EnvironmentVariablesConfigurationSource

    ConcurrentModificationException in EnvironmentVariablesConfigurationSource

    Caused by: java.util.ConcurrentModificationException
            at java.util.HashMap$HashIterator.nextNode(HashMap.java:1493) ~[?:?]
            at java.util.HashMap$EntryIterator.next(HashMap.java:1526) ~[?:?]
            at java.util.HashMap$EntryIterator.next(HashMap.java:1524) ~[?:?]
            at org.cfg4j.source.system.EnvironmentVariablesConfigurationSource.getConfiguration(EnvironmentVariablesConfigurationSource.java:50) ~[gelato-service-all.jar:?]
            at org.cfg4j.source.compose.MergeConfigurationSource.getConfiguration(MergeConfigurationSource.java:62) ~[gelato-service-all.jar:?]
            at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:91) ~[gelato-service-all.jar:?]
            at org.cfg4j.provider.SimpleConfigurationProvider.getProperty(SimpleConfigurationProvider.java:76) ~[gelato-service-all.jar:?]
            at org.cfg4j.provider.BindInvocationHandler.invoke(BindInvocationHandler.java:61) ~[gelato-service-all.jar:?]
            at com.sun.proxy.$Proxy30.userAgent(Unknown Source) ~[?:?]
    
    opened by Paxa 0
Releases(v.4.4.1)
  • v.4.4.1(Jul 12, 2017)

  • v.4.4.0(May 7, 2016)

    New features

    • New configuration format supported: JSON files - #152

    Fixes

    • Using default environment ("") throws exception with ClasspathConfigurationSource - #155
    • Fixed invalid exception message - #159
    • Improved documentation
    Source code(tar.gz)
    Source code(zip)
  • v.4.3.0(Apr 19, 2016)

    New features

    • New configuration source: System properties - #128, #146
    • New configuration source: Environment variables - #128, #146
    • Detect both *.yaml and *.yml files as YAML files - #141
    Source code(tar.gz)
    Source code(zip)
  • v.4.2.1(Apr 7, 2016)

    Fixes

    • #136 - FallbackConfigurationSource would fail when one of the underlying sources threw SourceCommunicationException

    Improvements

    • #139 - notify user when the getConfiguration() method gets called before init() or after failed reload() call
    Source code(tar.gz)
    Source code(zip)
  • v.4.2.0(Apr 5, 2016)

  • v4.1.4(Dec 3, 2015)

  • v4.1.3(Nov 3, 2015)

  • v4.1.2(Nov 3, 2015)

  • v4.1.1(Oct 1, 2015)

  • v4.1.0(Aug 30, 2015)

    New features

    • new source: in-memory, backed by Properties object (see InMemoryConfigurationSource)
    • ConfigurationProvider can now emit performance and usage metrics (see ConfigurationProviderBuilder#withMetrics)

    Other

    • upgrade dependencies
    • more integration tests
    • improve source connection management (delay first connection to the moment when it's needed)
    Source code(tar.gz)
    Source code(zip)
  • v4.0.2(Aug 25, 2015)

  • v4.0.1(Aug 15, 2015)

  • v4.0.0(Aug 8, 2015)

    New features

    • add YAML support
    • PeriodicalReloadStrategy now supports multiple providers (one extra thread instead of many)
    • new builders for configuration sources for easier construction
    • add toString() methods for better logging
    • cfg4j is now split into 3 modules:
      • cfg4j-core - contains core classes and configuration sources (Files, Classpath, Merge, Fallback, Empty)
      • cfg4j-consul - contains Consul configuration source
      • cfg4j-git - contains Git configuration source

    Fixes

    • better logging messages

    Interface changes

    Renames & moves

    • EnvironmentBasedBranchResolver -> FirstTokenBranchResolver
    • EnvironmentBasedPathResolver -> AllButFirstTokenPathResolver
    • Refreshable -> Reloadable
    • RefreshStrategy -> ReloadStrategy
    • OnInitRefreshStrategy -> ImmediateReloadStrategy
    • PeriodicalRefreshStrategy -> PeriodicalReloadStrategy
    • rename package: refresh -> reload
    • reorganized org.cfg4j.source package

    Changes

    • ConfigFilesProvider.getConfigFiles() returns Iterable instead of Iterable
    • GitConfigurationSource now throws IllegalStateException and SourceCommunicationException instead of GitConfigurationSourceException

    Removals

    • removed deprecated ConfigurationSource.getConfiguration()
    • removed deprecated PeriodicalRefreshStrategy(long refreshAfterMs) constructor
    • removed ConfigurationProviders class
    • removed ConfigurationProvider.getProperty(String key)

    Other

    • upgraded dependencies
    Source code(tar.gz)
    Source code(zip)
  • v3.3.2(Jun 28, 2015)

  • v3.3.1(Jun 19, 2015)

  • v3.3.0(Jun 16, 2015)

    New features

    • new source backed by classpath files (see ClasspathConfigurationSource)

    Fixes

    • support malformed configuration files in the following sources: files, git

    Other

    • upgrade dependencies
    • javadoc improvements
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Jun 15, 2015)

    New features

    • new source backed by regular files (see FilesConfigurationSource)
    • support merge configurations (see MergeConfigurationSource)
    • support fallback to other source when selected source fails (see FallbackConfigurationSource)
    • allow to specify *time unit when constructing PeriodicalRefreshStrategy
    • remove direct dependency on Guava

    Fixes

    • Use provided source environment when calling SimpleConfigurationProvider.getProperty() and SimpleConfigurationProvider.bind() - #64 #62 - thanks @pimlock

    Interface changes

    • deprecate ConfigurationSource.getConfiguration()
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Jun 11, 2015)

  • v3.0.0(Jun 8, 2015)

  • v2.0.1(Jun 7, 2015)

  • v2.0.0(Jun 7, 2015)

    New features

    • support configuration refresh
      • on-demand (e.g. using source-supported push mechanism)
      • periodical (every N miliseconds)
      • define your own refresh strategy
    • multi-environment/multi-tenant support
      • Use environments to specify which configuration environment from the configuration source to use (see Environment class)
      • git source: default behavior - map environments to git branches and directories in those branches (see EnvironmentBasedBranchResolver and EnvironmentBasedPathResolver)
      • git: implement BranchResolver and PathResolver to override default behavior
    • logging through SLF4J
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jun 4, 2015)

    New features

    • support primitive types and their object counterparts
    • support broad set of collections
    • POJO config objects binding
    • git connector: configuration refresh
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jun 1, 2015)

Owner
cfg4j
Modern configuration library for distributed apps written in Java.
cfg4j
Modern tool for microservice configuration management

Quick start We recommend to start with Microconfig Features guide and then continue reading this documentation. Microconfig overview and features Micr

Microconfig 262 Dec 19, 2022
A simple configuration library for Java applications providing a node structure, a variety of formats, and tools for transformation

Configurate Configurate is a simple configuration library for Java applications that provides a node-based representation of data, able to handle a wi

SpongePowered 274 Jan 3, 2023
A twelve-factor configuration (12factor.net/config) library for Java 8+

dotenv A twelve-factor configuration library for Java 8+. Features: seamless integration with Guice (prefer Spring? see here); zero dependencies; avai

Stanley Shyiko 42 Oct 1, 2022
configuration library for JVM languages using HOCON files

Configuration library for JVM languages. If you have questions or are working on a pull request or just curious, please feel welcome to join the chat

Lightbend 5.8k Jan 4, 2023
configuration library for JVM languages using HOCON files

Configuration library for JVM languages. If you have questions or are working on a pull request or just curious, please feel welcome to join the chat

Lightbend 5.8k Jan 4, 2023
Library for configuration management API

Archaius Features Archaius includes a set of configuration management APIs used by Netflix. It provides the following functionality: Dynamic, Typed Pr

Netflix, Inc. 2.4k Dec 22, 2022
Simple Java/POJO config library written with love and Lombok

Okaeri Configs Supported platforms (general use) General implementations based on standard format libraries directly. HJSON ?? hjson-java: Human JSON

Okaeri 51 Jan 7, 2023
Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2

Visit the official web site for more information. Central Dogma Central Dogma is an open-source, highly-available and version-controlled service confi

LINE 503 Dec 20, 2022
Get rid of the boilerplate code in properties based configuration.

OWNER OWNER, an API to ease Java property files usage. INTRODUCTION The goal of OWNER API is to minimize the code required to handle application confi

lviggiano 874 Dec 31, 2022
Nacos: Dynamic Naming and Configuration Service

An easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.

Alibaba 25.1k Jan 3, 2023
Simple Ini Parser for Java or SIni4j is a simple INI parse made in Java

Simple Ini Parser for Java or SIni4j is a simple INI parse made in Java, built for provide a simple and easiest way to load INI files in Java

Synonware 2 Mar 18, 2022
Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Gabriele Rizzo 865 Jan 2, 2023
A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs

A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs. Build stable and reliable end-to-end tests @ DevOps speed.

Testsigma Technologies Inc 466 Dec 31, 2022
Bootique is a minimally opinionated platform for modern runnable Java apps.

Bootique is a minimally opinionated java launcher and integration technology. It is intended for building container-less runnable Java applications. W

Bootique Project 1.4k Dec 29, 2022
KickAss Configuration. An annotation-based configuration system for Java and Kotlin

KAConf 2016-2020 Mario Macías KickAss Configuration v0.9.0 is an Annotation-based configuration system inspired in the wonderful Spring Boot. Its stro

Mario Macías 53 Nov 21, 2022
This plugin disables commands specified in the configuration and prevents granting the "OP" authority to people not authorized in the plugin configuration.

Ares This plugin disables commands specified in the configuration and prevents granting the "OP" authority to people not authorized in the plugin conf

ᴠᴀʟᴇɴᴛɪɴ ᴢʜᴇʟᴇᴠ 6 Aug 30, 2022
Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.

English | 中文 Apollo - A reliable configuration management system Apollo is a reliable configuration management system. It can centrally manage the con

Apollo 27.6k Jan 5, 2023
Modern tool for microservice configuration management

Quick start We recommend to start with Microconfig Features guide and then continue reading this documentation. Microconfig overview and features Micr

Microconfig 262 Dec 19, 2022
Distributed and fault-tolerant realtime computation: stream processing, continuous computation, distributed RPC, and more

IMPORTANT NOTE!!! Storm has Moved to Apache. The official Storm git repository is now hosted by Apache, and is mirrored on github here: https://github

Nathan Marz 8.9k Dec 26, 2022