| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"/> |
| <title>Geronimo Config User Guide</title> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="description" content=""> |
| <meta name="author" content=""> |
| <meta name="keywords" content=""> |
| <meta name="generator" content="JBake"> |
| |
| <!-- Le styles --> |
| <link href="../css/bootstrap.min.css" rel="stylesheet"> |
| <link href="../css/asciidoctor.css" rel="stylesheet"> |
| <link href="../css/base.css" rel="stylesheet"> |
| <link href="../css/prettify.css" rel="stylesheet"> |
| |
| <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> |
| <!--[if lt IE 9]> |
| <script src="../js/html5shiv.min.js"></script> |
| <![endif]--> |
| |
| <!-- Fav and touch icons --> |
| <!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> |
| <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> |
| <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> |
| <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">--> |
| <link rel="shortcut icon" href="../favicon.ico"> |
| </head> |
| <body onload="prettyPrint()"> |
| <div id="wrap"> |
| |
| <!-- Fixed navbar --> |
| <div class="navbar navbar-default navbar-fixed-top" role="navigation"> |
| <div class="container"> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> |
| <span class="sr-only">Toggle navigation</span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| </button> |
| <a class="navbar-brand" href="http://geronimo.apache.org/new-site/">Apache Geronimo</a> |
| </div> |
| <div class="navbar-collapse collapse"> |
| <ul class="nav navbar-nav"> |
| <li><a href="http://geronimo.apache.org/new-site/index.html">Home</a></li> |
| <li><a href="http://geronimo.apache.org/new-site/about.html">About</a></li> |
| <li><a href="http://geronimo.apache.org/new-site/contact.html">Contact</a></li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">Projects <b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="http://geronimo.apache.org/new-site/config">Config</a></li> |
| <li><a href="http://geronimo.apache.org/new-site/safeguard">Safeguard</a></li> |
| <li><a href="http://geronimo.apache.org/new-site/specs">Specs</a></li> |
| <li><a href="http://geronimo.apache.org/new-site/xbean">XBean</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div><!--/.nav-collapse --> |
| </div> |
| </div> |
| <div class="container"> |
| <div class="page-header"> |
| <h1>Geronimo Config User Guide</h1> |
| </div> |
| |
| <p><em>19 September 2017</em></p> |
| |
| <p><div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>To get started with Geronimo Config, you’ll want to add the dependencies to the project. Eclipse MicroProfile Config is a transitive dependency, it will come in automatically as a dependency.</p> |
| </div> |
| <div class="paragraph"> |
| <p>If you’re using Maven:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="prettyprint highlight"><code><dependency> |
| <groupId>org.apache.geronimo.config</groupId> |
| <artifactId>geronimo-config-impl</artifactId> |
| <version>1.0</version> |
| </dependency></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>If you’re using Gradle:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="prettyprint highlight"><code>dependencies { |
| compile 'org.apache.geronimo.config:geronimo-config-impl:1.0' |
| }</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_general_use_cases">General Use Cases</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_registering_config_sources">Registering Config Sources</h3> |
| <div class="paragraph"> |
| <p><code>ConfigSource</code> implementations can be registered via <code>ServiceLoader</code>. Declare a <code>ServiceLoader</code> of type <code>ConfigSource</code> or <code>ConfigSourceProvider</code> to <a href="https://github.com/eclipse/microprofile-config/blob/1.1/spec/src/main/asciidoc/configsources.asciidoc#custom-configsources">register these classes</a>.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_default_config_sources">Default Config Sources</h3> |
| <div class="paragraph"> |
| <p>By default, we register a <code>ConfigSource</code> for System Properties as well as Environment Variables.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Environment Variables are attempted using both <code>.</code> as well as <code>_</code>, meaning a property lookup for <code>my.config.property</code> will search both <code>my.config.property</code> as well as <code>my_config_property</code>, to conform to naming convention standards for environment variables.</p> |
| </div> |
| <div class="paragraph"> |
| <p>System Properties are loaded on start up, copying the values into the config source instance. You can change this behavior by: |
| - disabling default config source loading, and manually registering a <code>SystemPropertyConfigSource</code> passing in <code>false</code> in the constructor |
| - Set the system property <code>org.apache.geronimo.config.configsource.SystemPropertyConfigSource.copy</code> to <code>false</code></p> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_cdi_use_cases">CDI Use Cases</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Being an implementation of a MicroProfile specification, it favors use cases based on CDI. Most of the heavy lifting is done for you when using CDI.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="_injecting_config">Injecting Config</h3> |
| <div class="paragraph"> |
| <p>The MicroProfile <code>Config</code> interface is supported as an injection point. It is an <code>@ApplicationScoped</code> bean, loaded from the result of <code>ConfigProvider.getConfig()</code>.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="prettyprint highlight"><code>@Inject |
| private Config config</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Will allow you to use the default <code>Config</code> object for your application. All of the operations of <code>Config</code> match the MicroProfile Specification.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_injecting_config_properties">Injecting Config Properties</h3> |
| <div class="paragraph"> |
| <p>Injecting <code>@ConfigProperty</code> <a href="https://github.com/eclipse/microprofile-config/blob/1.1/spec/src/main/asciidoc/configexamples.asciidoc#simple-dependency-injection-example">works based on the specification</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>In addition to the defined supported types, Geronimo Config supports injecting <code>Supplier<T></code> where <code>T</code> is any type that has a supported <code>Converter</code>.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_non_cdi_use_cases">Non-CDI Use Cases</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>You may not be using CDI, or do not want to use the built in CDI integration. You can then using the programmatic look up for the configuration.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="prettyprint highlight"><code class="language-java" data-lang="java">Config config = ConfigProviderResolver.instance().getBuilder() |
| .addDefaultSources() // built in config sources (system properties, environment variables and microprofile-config.properties |
| .addDiscoveredConverters() // converters discovered via ServiceLoader |
| .addDiscoveredSources() // sources discovered via ServiceLoader |
| .withConverters() // list of converter instances, cannot be lambda expressions |
| .withSources() // list of config source instances |
| .forClassLoader() // the classloader associated with this config |
| .build()</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>This will register and build a <code>Config</code> object for use. You will need to keep track of that created instance. If you want it to be managed automatically, you can then register it</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="prettyprint highlight"><code class="language-java" data-lang="java">ConfigProviderResolver.instance().registerConfig(config, classLoader);</code></pre> |
| </div> |
| </div> |
| </div> |
| </div></p> |
| |
| <hr /> |
| |
| </div> |
| <div id="push"></div> |
| </div> |
| |
| <div id="footer"> |
| <div class="container"> |
| <p class="muted credit">© 2014 | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake v2.5.1</a></p> |
| </div> |
| </div> |
| |
| <!-- Le javascript |
| ================================================== --> |
| <!-- Placed at the end of the document so the pages load faster --> |
| <script src="../js/jquery-1.11.1.min.js"></script> |
| <script src="../js/bootstrap.min.js"></script> |
| <script src="../js/prettify.js"></script> |
| |
| </body> |
| </html> |