:jbake-type: page
:jbake-status: published

[toc]

= Tamaya\'s Features

Apache Tamaya comes with numerous useful features. This page lists the most important
ones. Also also have a look at the full feature list. If you don't find your features,
please get in contact with us to discuss your ideas!

== Core Features

The Core Features are built-in riht away and available by default. Just add Tamaya to your project
dependencies and there you go!


=== Accessing Configuration

Tamaya provides a super simple API to access configuration:

[source: java]
----
Configuration config = Configuration.current();
----

Yes it's as easy as that. Optionally you can also pass your classloader of choice:

[source: java]
----
ClassLoader myApplicationClassLoader = ...;
Configuration config = Configuration.current(myApplicationClassLoader);
----

From there you can access your configuration properties:

[source: java]
----
String host = config.getOrDefault("server.host", "localhost");
Optional<Integer> port = config.getOptional("server.port", Integer.class);
----


=== Providing Configuration

Providing configuration is as simple:

* Implement the `PropertySource` interface.
* Register your implementation with the Java `ServiceLoader`.


== Configuration Auto-Discovery and Builders

Tamaya can care about everything. You dont have to bother with
configuration sources, classloaders, overriding etc. Tamaya will collect and load
all registered property sources.

On the other hand if you prefer having full control, Tamaya provides
powerful factories and builders, with allow to built your customized
configuration and manage your own configuration lifecycle.

[source: java]
----
Configuration config = Configuration.builder()
              .withDefaultPropertySources()
              .addPropertySources(new MyCustomPropertySource())
              .withDefaultConverters()
              .build();
----


== Pluggable Extensions

Tamaya comes with numerous features, that can be easily added. Just add
the corresponding dependency to your build. Yes, it's as easy as that.
So let's have a quick look at some of the most commonly used features...


== Functional Extensions


== Dynamic Placeholders


== Different Configuration Formats: JSON, YAML, XML, properties, ini...


== Support for Configuration Injection


== Support for Configuration Templates


== Ant styled File Resource Wildcards


== Support for Spring/Spring Boot








