在Spring应用程序中,我设置app-security.xml来控制所有安全问题。但是,生产将使用SSO,在本地机器上我希望普通的旧用户验证。我还有两个本地机器 - 一个是项目由IntelliJ Idea构建,另一个是由Ant构建,产生一个WAR。生产系统将使用Ant构建。
如何组织我的项目以便可以方便地开发并且能够构建类似生产的系统?
答案 0 :(得分:2)
您可以使用PropertyPlaceHolderConfigurer bean为您定义变量。你可以尝试
<import resource="${resource}" />
PropertyPlaceHolderConfigurer
bean扫描xml配置中的${resource}
等变量,并根据属性文件中的设置替换它们。这假设您在属性文件中有单独的值用于生产和开发。
未来项目的提示是尝试maven
。这里有一个filtering
功能,允许您根据配置文件定义自定义属性,非常整洁有用。
答案 1 :(得分:1)
我最近用这种方法解决了类似的问题。我使用了Spring 3的新功能 - 表达式语言。它允许你做这样的事情:
<bean class="com.my.AuthManager">
<property name="authProvider"
ref="#{systemProperties['isDevelopment'] ? 'localProvider' : 'ssoProvider'}" />
</bean>
<bean id="localProvider" lazy-init="true" ... />
<bean id="ssoProvider" lazy-init="true" ... />
在这种情况下,您可以使用-DisDevelopment=true
启动JVM,并使用localProvider
。另一方面,ssoProvider
甚至不会被实例化,因为lazy-init
属性为true
。
答案 2 :(得分:0)
您可以使用属性文件为不同的环境进行自定义。
答案 3 :(得分:0)
如果您可以转到Spring 3.1,那么它对环境特定的配置文件具有原生支持
'环境概况'将允许 基于a的占位符解析 指定的环境名称(或名称)。 这允许不同的配置 例如,开发和生产, 没有两个不同 部署工件。我想他也是 提到了一个环境抽象, 我认为这将是访问 相同的配置 编程。
如果您使用的是旧版本,那么您可能希望自己管理(主要是通过构建过程。我们使用maven并使用maven配置文件来执行此操作。我相信您也可以使用ant执行相同操作)。以下是对此的一个讨论:http://forum.springsource.org/showthread.php?t=12373
答案 4 :(得分:0)
我在我最新的基于Spring的项目中使用Configleon来根据我所处的环境使Spring加载属性文件。 该库适用于Web应用程序和不使用Servlet的应用程序。
答案 5 :(得分:0)
我个人不喜欢为每个环境提供不同的WAR文件。这是一个很大的干扰。 Spring 3.1将最终在核心中解决这个问题。在此期间,您可以使用Easy Angel提供的Spring EL方法,或者(我的偏好)使用带代码的@Bean在不同的实现之间切换。