The library helps to prevent boilerplate code for random strings and names, SPI-based slf4j configuration, sophisticated property files, human readable representation of date differences and getting attributes from MANIFEST.FM files.
Download/use the latest binaries from central maven repository
The javadoc can be found at here
Helps to read attributes from a Manifest file and provides a uniform "version" string which has version, git-commit, creation date and a html-link to git
An example project is on Github.
1.) add this to your pom.xml, to add the information into the MANIFEST.FM file:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifestEntries>
<git-commit>${buildNumber}</git-commit>
<git-url>${project.scm.url}</git-url>
<creation-date>${timestamp}</creation-date>
<project-version>${project.version}</project-version>
</manifestEntries>
</archive>
</configuration>
</plugin>
2.) add this to your pom.xml to retrieve the git commit hash:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<shortRevisionLength>7</shortRevisionLength>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
</configuration>
</plugin>
3.) use a ServletContextListener.contextInitialized(ServletContextEvent) to get a proper version string
VersionFromManifest vfm = new VersionFromManifest();
vfm.initFromFile(sce.getServletContext().getRealPath("/META-INF/MANIFEST.MF"));
longVersion = vfm.getLongVersion();
Implements SPI-based slf4j configuration. It changes the order and places where slf4j looks for configuration files. The "APP_NAME" is given as a parameter in the constructor. Checks first the system parameter "APP_NAME"-logback for a filename, if this parameter is not given or the file doesn't exist it looks in /etc/logback-custom.xml. If all this doesn't exist it uses /logback-custom.xml in the $CLASSPATH. It also sets the slf4j variable "application-name" with the "APP_NAME".
- Create a class in your project and extend it from de.oglimmer.utils.BaseConfigurator
- Have a parameter less constructor and set your application name in super("....");
- Create META-INF/services/ch.qos.logback.classic.spi.Configurator under src/main/resources
- Put the full qualified filename of your class from (1) into that file
- make sure you have a logback-custom.xml in your project (and not logback.xml)
A base class for application property classes. Supports json-based config files, automatic reloads when the file changes, merging in-classpath and out-of-classpath files and can take the whole configuration from a string to support unit test configurations.
-
Create a (singleton) class in your project and extends it from de.oglimmer.utils.AbstractProperties
-
Have a parameter less constructor and pass the name of the system parameter to your production config file to super("...."), e.g. super("my_app")
-
create as many getters as you need like
public String getSmtpUser() { return getJson().getString("smtp.user"); } -
put a default.properties into src/main/resources. this needs to be a json file and should hold all default/development values for all properties
-
On your production host start the server with -Dmy_app=/etc/my_app.properties