我在开发基于OSGi
的spring和beans
应用程序时遇到了一个问题。在我的应用程序中,我想使用Spring ApplicationContextInitializer
配置文件,但我不知道如何强制使用特定的配置文件。我曾经使用过一次spring命令,但是在Web应用程序中我遵循了本教程:http://java.dzone.com/articles/spring-31-environment-profiles。
但是我不知道如何在OSGi环境中这样做,因为我找不到一些等价的{{1}}
答案 0 :(得分:2)
我不确定spring-dm是否支持它,因为它基于较旧的Spring。 Spring的配置文件被添加到Spring 3.1中,这是在spring-dm是一个死的项目之后很久就创建的。 http://www.springsource.org/osgi
答案 1 :(得分:0)
Spring-DM可能不支持更新版本的Spring,但Eclipse Gemini Blueprint可以。如果您可以使用Spring 3.1.x或更高版本以及Blueprint,那么您可以使用Spring配置文件。一种方法是extend the Blueprint Extender bundle使用您自己的OsgiApplicationContextCreator
实现,根据您的需要配置ApplicationContext
Environment
个有效配置文件。例如,请考虑以下自定义BlueprintContainerCreator
实现:
public class MyOsgiApplicationContextCreator extends BlueprintContainerCreator {
@Override
public DelegatedExecutionOsgiBundleApplicationContext createApplicationContext(
BundleContext bundleContext) throws Exception {
DelegatedExecutionOsgiBundleApplicationContext applicationContext = super
.createApplicationContext(bundleContext);
if (null == applicationContext) {
// non-spring/blueprint bundles will not build an ApplicationContext
return null;
}
// determine environment profile here...
applicationContext.getEnvironment().setActiveProfiles("myProfile");
return applicationContext;
}
}
您需要将其放入附加到蓝图扩展程序包的片段包中。执行以下操作:
您需要创建一个包含三个文件的包:META-INF / MANIFEST.MF,META-INF / spring / extender / extender.xml(xml文件可以命名为xml扩展名,但是必须在META-INF / spring / extender文件夹中)和OsgiApplicationContextCreator
实现。您的MANIFEST.MF文件需要包含org.eclipse.gemini.blueprint.extender
的OSGi清单标头Fragment-Host。如果您使用的是maven-bundle-plugin,那么您的插件配置将如下所示:
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.5</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Fragment-Host>org.eclipse.gemini.blueprint.extender</Fragment-Host>
<Export-Package>your.package,!*</Export-Package>
<Import-Package>org.osgi.framework,org.springframework.core.env,!*</Import-Package>
</instructions>
</configuration>
</plugin>
...
您的extender.xml文件需要定义名为OsgiApplicationContextCreator
的自定义applicationContextCreator
bean。该文件可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<util:properties id="extenderProperties">
<prop key="shutdown.wait.time">30000</prop>
</util:properties>
<bean id="applicationContextCreator" class="your.package.MyOsgiApplicationContextCreator"/>
</beans>
然后将捆绑包部署到您的环境中。您可能需要重新启动Blueprint OSGi包(或您的服务器),具体取决于此片段包相对于Blueprint包的安装顺序。