java - Spring 属性(property)整合

标签 java spring

我有一个 Spring bean:

<bean id="sharedBean" class="com.bean.SharedBean">
    <constructor-arg name="app-name" value="#{ config['app.name'] }"/>
</bean>

这个 bean 在一个 jar 中定义,并在两个应用程序中使用,这两个应用程序都部署到同一个 tomcat 服务器。我只有一个应用程序共享的属性文件,如果可能的话,我想保持这种状态。您可能会看到问题 - 我需要 app.name 的两个值(每个 Web 应用程序一个)。

我需要在每个应用程序中独立设置 app.name。我不介意在 Java 中硬编码值(但不认为我可以在那个方向注入(inject)值)。我知道我可以在不同的路径引入另一个属性文件并覆盖,但我希望有一种更好的方法可以通过 Spring 实现这一点,这将允许我只维护一个共享属性文件。

最佳答案

可能的解决方案,按推荐顺序:

1 - 在单独的 jar 文件中声明共享 bean 是否有原因?当然,bean 类可以位于此处,但为什么不在使用它的各个 Web 应用程序中声明实际的 bean?

2 - 如果您绝对需要将 bean 定义保留在共享 jar 中,您可以使用 bean inheritance ; (a) 更改您的 bean 类以使用属性而不是构造函数 arg:

<bean id="sharedBean" class="com.bean.SharedBean">
    <property name="app-name" value="default"/>
</bean>

(b) 在您的网络应用上下文文件中:

<bean id="instanceBean" parent="sharedBean">
    <property name="app-name" value="app1"/>
</bean>

3 - 使用 Spring 配置文件;在您共享的 jar context.xml 中:

<beans profile="app1">
    <bean id="sharedBean" class="com.bean.SharedBean">
        <constructor-arg name="app-name" value="app1"/>
    </bean>
</beans>

<beans profile="app2">
    <bean id="sharedBean" class="com.bean.SharedBean">
        <constructor-arg name="app-name" value="app2"/>
    </bean>
</beans>

note: <beans profile=... MUST be the last entries in your context file.

为每个 web.xml 添加一个上下文参数(根据需要更改值):

<context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>app1</param-value>
</context-param>

关于java - Spring 属性(property)整合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729133/

相关文章:

java - 如何在谷歌浏览器中获取 Activity 标签页索引?

java - 性能调整 : com. mchange.v2.resourcepool.Basicresourcepool.Awaitavailable() 方法占用应用程序的大部分运行时间

java - 有效的 XML 文档必须有根标签

java - Spring 的 Bean 列表

java - 在 IDEA 中设置 Web 应用程序时,有人可以帮助我使用 Facets/Modules 和 Artifacts

java - intent.putExtra() 和intent.getStringExtra() 不起作用。 getStringExtra 返回 null

java - 无法从 AsyncTask 填充 ListView

java - 当将来列表中的第一个元素为true时,为什么要完成任务?

Spring 安全 OAuth2 : Purge TokenStore

java - channel 'outputChannel' 上的 postReceive,消息为空