我正在创建一个由Camel路由组成的ServiceMix模块。
在我的beans.xml中,我有:
<osgix:cm-properties id="companyProps"
persistent-id="com.company.integration">
</osgix:cm-properties>
<ctx:property-placeholder location="
file:${karaf.base}/etc/com.company.integration.cfg
" />
这意味着我可以使用文件中的属性定义其他项目,例如:
<http-conf:conduit name="*.http-conduit">
<http-conf:authorization>
<security:UserName>${username}</security:UserName>
<security:Password>${password}</security:Password>
</http-conf:authorization>
</http-conf:conduit>
如果我创建一个bean并注入它,我也可以访问我的java类中的属性:
<bean id="myConfig" class="com.company.integration.MyConfig">
<osgix:managed-properties persistent-id="com.company.integration" />
</bean>
问题在于我在编写单元测试时。目前我正在使用带有测试值的beans.xml副本,但当然我想使用真正的beans.xml并为属性提供值。
public class myTest extends CamelSpringTestSupport
{
@Override
protected AbstractXmlApplicationContext createApplicationContext()
{
return new ClassPathXmlApplicationContext(new String[] {
"/META-INF/spring/beans.xml"
, "/META-INF/spring/test.xml"
});
}
}
我想摆脱test.xml,最好从属性文件中加载test-properties。 我已经看到了对PropertyComponent的一些引用,但我无法让它工作: - (
答案 0 :(得分:4)
在我们的组织中,我们将spring-osgi配置与spring bean配置分开。
在我们的spring-osgi配置中,我们将提供以下内容:
<osgix:cm-properties id="companyProps" persistent-id="com.company.integration">
<prop key="name">value</prop>
<prop key="name">value</prop>
...
</osgix:cm-properties>
以及任何特定于osgi的配置(例如服务注册,事件等)
在我们的spring-bean配置中,我们定义了我们在osgi容器之外可以使用的所有bean,包括camel路由/上下文等。
对于我们的测试,我们使用spring bean定义和包含以下内容的测试弹簧配置启动ClassPathXmlContext:
<ctx:property-placeholder location="classpath*:test.properties" />
以及osgi特定bean所需的任何模拟。
希望这有帮助。