Implement a ServletContextListener
.
Here's a basic kickoff example:
public class Config implements ServletContextListener {
private static final String ATTRIBUTE_NAME = "config";
private Properties config = new Properties();
@Override
public void contextInitialized(ServletContextEvent event) {
try {
config.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
} catch (IOException e) {
throw new SomeRuntimeException("Loading config failed", e);
}
event.getServletContext().setAttribute(ATTRIBUTE_NAME, this);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP.
}
public static Config getInstance(ServletContext context) {
return (Config) context.getAttribute(ATTRIBUTE_NAME);
}
public String getProperty(String key) {
return config.getProperty(key);
}
}
which you register as follows in web.xml
:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
and which you can access in your servlets as follows:
Config config = Config.getInstance(getServletContext());
String property = config.getProperty("somekey");
After having a second thought, those properties are thus 100% specific to business layer, not to the webapplication itself? Then a ServletContextListener
is indeed clumsy and too tight coupled. Just give the business layer its own Config
class which loads the properties from the classpath and caches it in some static
variable (Map<String, Properties>
maybe?).