Y at-il une possibilité de configurer le Spring PropertyPlaceholderConfigurer pour lire à partir de properties.xml, via Apache Commons Configuration?PropertyPlaceholderConfigurer lit à partir du fichier XML (Configuration d'Apache Commons)
Répondre
J'ai trouvé une solution avec l'aide de seanizer et springmodule
<!-- Composite configuration -->
<bean id="configuration" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
<property name="configurations">
<list>
<!-- User specifics -->
<bean class="org.apache.commons.configuration.XMLConfiguration">
<constructor-arg type="java.net.URL" value="file:cfg.xml" />
</bean>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="configuration"/>
</bean>
<bean id="testConfig" class="uvst.cfg.TestConfiguration">
<property name="domain" value="${some.prop}"></property>
</bean>
classe TestConfiguration
public class TestConfiguration {
private String domain;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
}
jUnit TestClass
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/applicationContextTest.xml" })
public class ApacheCommonCfg2Spring extends AbstractJUnit4SpringContextTests {
private TestConfiguration tcfg;
@Test
public void configuration(){
tcfg = this.applicationContext.getBean("testConfig", TestConfiguration.class);
System.out.println(tcfg.getDomain());
}
}
Springmodule est assez vieux d'il semble que ce soit pas plus longtemps, mais cela fonctionne avec S pring 3.0.3.
n'hésitez pas à copier & pâte!
La façon la plus simple (peut-être pas la plus belle que) serait de sous-classe la PropertyPlaceholdeConfigurer, chargez là-bas et passe ensuite la configuration des communes à la superclasse:
public class TestPlaceholderConfigurer extends PropertyPlaceholderConfigurer
{
public TestPlaceholderConfigurer()
{
super();
}
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
throws BeansException
{
XMLConfiguration config = new XMLConfiguration("config.xml");
Properties commonsProperties = config.getProperties("someKey")
// Or something else with the configuration
super.processProperties(beanFactoryToProcess, commonsProperties);
}
}
Ensuite, vous utilisez juste cette classe comme placeholderConfig :
<bean id="placeholderConfig"
class="com.exampl.TestPlaceholderConfigurer ">
<!-- ... -->
</bean>
Cela ne fonctionne pas. – Alex
Peut-être que vous pouvez élaborer sur "Cela ne fonctionne pas". Après tout, Daff a fait des efforts pour essayer de répondre à votre question. –
C'est vrai, ce n'était pas censé être une copie de copier/coller (ce que je dois supposer que vous avez fait concernant votre réponse inutile et une mise au rancart non commentée). Comme d'habitude avec des réponses ici, c'est juste un guide sur la façon de résoudre votre problème, si vous avez une question spécifique juste postez-le comme une réponse. – Daff
Voici un solution using spring modules. Je ne sais pas à quel point c'est actuel, mais même si ce n'est pas le cas, vous pourriez facilement prendre le code et le faire fonctionner avec les versions actuelles.
duplication possible de [Existe-t-il une classe de type PropertyPlaceholderConfigurer à utiliser avec Spring qui accepte XML?] (Http://stackoverflow.com/questions/479855/is-there-a-propertyplaceholderconfigurer-like-class-for- use-with-spring-that-acce) – GaryF