Il suffit de créer une factory pour CDI et une annotation (tiré du blog http://codebias.blogspot.fr/2013/04/environment-configuration-property.html) .
Création de l'annotation
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.enterprise.util.Nonbinding;
import javax.inject.Qualifier;
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Configuration {
@Nonbinding
String value() default "";
}
Création de la factory
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
@ApplicationScoped
public class ConfigurationFactory {
private static final String ENVIRONMENT_NAME_KEY = "environment.name";
private static final String DEFAULT_PROPS_FILENAME = "environment.properties";
private static final String PROPS_FILENAME_FORMAT = "environment_%s.properties";
private Properties environmentProps;
@PostConstruct
public void initEnvironmentProps() throws IOException {
environmentProps = new Properties();
String propsFilename = DEFAULT_PROPS_FILENAME;
String environmentName = System.getProperty(ENVIRONMENT_NAME_KEY);
if (environmentName != null) {
propsFilename = String.format(PROPS_FILENAME_FORMAT, environmentName);
}
try(InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propsFilename)){
if (inputStream == null) {
throw new FileNotFoundException("Properties file for environment " + environmentName + " not found in the classpath.");
}
environmentProps.load(inputStream);
}
}
@Produces
@Configuration
public String getConfigValue(InjectionPoint ip) {
Configuration config = ip.getAnnotated().getAnnotation(Configuration.class);
String configKey = config.value();
if (configKey.isEmpty()) {
throw new IllegalArgumentException("Properties value key is required.");
}
return environmentProps.getProperty(configKey);
}
}
Comment on l'appel ?
//Usage
@Inject
@Configuration("url")
private String testUrl;
//...
Aucun commentaire:
Enregistrer un commentaire