Apache Commons Configuration is the most similar library to settings4j.
Commons Configuration has also like settings4j the ability to mix configurations from heterogeneous sources and treat them like a single logic configuration.
The main differences are (as far as I know):
Because commons configuration is older then Settings4j and had more Sources/Connectors to configure, it is an essential element to provide an Adapter to use commons-configruation in Settings4j.
With the ConfigurationToConnectorAdapter you can use every Configuration from Apache Commons Configuration as Settings4j-Connector.
An Example code could looks like the following:
public void initSettings4j() {
String connectorName = "myCommonsConfigXmlConfigConnector";
Connector connector = Settings4j.getSettings().getConnector(connectorName);
if (connector == null) {
XMLConfiguration configuration = new XMLConfiguration(new File(.....));
connector = new ConfigurationToConnectorAdapter(connectorName, configuration);
// add the connecter after the last SystemPropertyConnector or add it as first connector.
Settings4j.getSettings().addConnector(connector, //
ConnectorPositions.firstValid(//
ConnectorPositions.afterLast(SystemPropertyConnector.class), //
ConnectorPositions.atFirst() // if no SystemPropertyConnector is configured.
)//
);
}
}
If you use the Spring-Placeholder for Settings4j, you must use a depends-on attribute to be sure that the initialization runs first:
<beans> <bean class="org.settings4j.helper.spring.Settings4jPlaceholderConfigurer" depends-on="initSettings4j"/> <!-- InitSettings4j.initSettings4j() will add the custom converter to the Settings4j instance. --> <bean id="initSettings4j" class="com.myProject.InitSettings4j" init-method="initSettings4j"/> </beans>
| Commons Configuration | Settings4j | |
| Properties files | PropertiesConfiguration | PropertyFileConnector |
| Property list files (plist) | PropertyListConfiguration | - |
| JNDI | JNDIConfiguration | JndiConnector |
| System properties | SystemConfiguration | SystemPropertyConnector |
| XML | XMLConfiguration | - |
| Windows INI files | HierarchicalINIConfiguration | - |
| JDBC Datasource | DatabaseConfiguration | - |
| java.util.prefs.Preferences | - | PreferencesConnector |
| Environment (System.getenv(...)) | - | EnvironmentConnector |
| Applet parameters | AppletConfiguration | - |
| Servlet parameters | ServletConfiguration | - |
| File System | - | FSConnector |
| Classpath | - | ClasspathConnector |
The list maybe not complete. Everyone can implement his own Converters for Commons-Configuration or Connectors for Settings4j.
| Commons Configuration | Settings4j | |
| String | ✔ | ✔ |
| byte[] content | - | ✔ |
| Object | - | ✔ |
| BigDecimal | ✔ | - |
| BigInteger | ✔ | - |
| boolean | ✔ | - |
| byte | ✔ | - |
| double | ✔ | - |
| float | ✔ | - |
| int | ✔ | - |
| long | ✔ | - |
| short | ✔ | - |