Create an interface for your config object:
public interface MyConfig
{
@Config("foo")
String getFoo();
@Config("blah")
int getBlah();
@Config("what")
@Default("none")
String getWhat();
}
Set the properties that we mapped with @Config above (or simply call System.getProperties()):
Properties props = new Properties();
props.setProperty("foo", "hello");
props.setProperty("blah", "123");
Then create the config object from the properties:
ConfigurationObjectFactory factory = new ConfigurationObjectFactory(props);
MyConfig conf = factory.build(MyConfig.class);
Using @Default() can set arbitrary default values. To set null as the default value, use the @DefaultNullannotation.
@Config({"what1", "what2"})
@Default("none")
String getWhat();
will look at what1 first, then at what2 and finally fall back to the default.
enum StateType {
FILESYSTEM,
MEMORY
}
@Config("${state_type}.size")
@DefaultNull
String getParameterizedConfig(@Param("state_type") StateType e);
@Config("${state_type}.${source}.path")
@DefaultNull
String getDoubleParameterizedConfig(@Param("state_type") StateType e, @Param("source") String source);
Use it like the following:
myConfig.getParameterizedConfig(StateType.MEMORY); // reads from MEMORY.size
myConfig.getDoubleParameterizedConfig(StateType.FILESYSTEM, "backend"); // reads from FILESYSTEM.backend.path
Config-magic supports these types:
- Primitive types:
boolean,byte,short,integer,long,float,double. - Enums. Note that config-magic by default ignores the case for enum values.
java.lang.String.java.net.URI.java.lang.Classand simple wildcard extensions (java.lang.Class<?>,java.lang.Class<? extends Foo>- config-magic will type check that the type passed as a property conforms to the wildcard type), but not more complex wildcard or parameterized types (e.g.java.lang.Class<? super Bar>orjava.lang.Class<? extends List<? super Bar>>).org.skipe.config.TimeSpan: constructed from short textual representation like "5d" (or alias "5 days"); units supported are:- ms (alias 'milliseconds')
- s ('seconds')
- m ('minutes')
- h ('hours')
- d ('days')
- Any instantiable class that has a public constructor with a single
Objectparameter. This is useful for instance for joda-time'sDateTimeobjects. - Any instantiable class that has a public constructor with a single
Stringparameter. This is useful for instance forjava.lang.File. - Any class that has a static
valueOfmethod with a singleStringparameter and the class as its return type.
To use config-magic in Maven projects:
<dependency>
<groupId>org.skife.config</groupId>
<artifactId>config-magic</artifactId>
<version>0.11</version>
</dependency>
We have a mailing list for development and users.