当前位置: 首页 > 面试题库 >

在不同环境下定义Spring bean的通用策略

别旻
2023-03-14
问题内容

定义一堆bean(在开发和生产环境中使用不同的方法)的常见策略是什么?

假设我有2个bean,每个bean实现相同的接口。一个bean充当本地文件系统的抽象,另一个则连接到分布式文件系统。为了保持开发的稳定,开发环境应使用本地文件系统实现,生产发行版应使用分布式文件系统bean。

目前,我正在做的是两个xml定义。

native.xml

<bean id="resourceSystem" class="com.cust.NativeResourceSystem" />

分布式.xml

<bean id="resourceSystem" class="com.cust.HadoopResourceSystem">
    <constructor-arg name="fs" ref="hdfs" />
</bean>

创建应用程序上下文时,我忽略了一个native.xmldistributed.xml根据环境而定,并获取了resourceSystembean。

Spring中是否有适当的工具或最佳实践来为不同的环境配置bean定义?

谢谢。


问题答案:

Spring参考文档介绍了有关PropertyPlaceholderConfigurer的内容

PropertyPlaceholderConfigurer不仅会在您指定的Properties文件中查找属性, 还会检查Java
System属性
是否无法找到您要使用的属性。

如上所示,您可以设置一个Java System属性

在开发机器上

-Dprofile=development

在生产机器上

-Dprofile=production

因此,您可以定义全局应用程序上下文设置,如下所示 导入 每个分层的上下文设置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:property-placeholder/>
    <import resource="service-${profile}.xml"/>
    <import resource="persistence-${profile}.xml"/>
    <import resource="security-${profile}.xml"/>
</beans>

请记住,所有位置路径 都相对于进行导入的定义文件

因此,Spring支持这种配置。

通常,最好为此类绝对位置保留一个间接寻址,例如,通过 在运行时针对JVM系统属性解析的 “ $ {…}”占位符。



 类似资料:
  • A Zen student went up to a hot dog vendor and said: "Make me one with everything". — Joke 环境背景很重要。 如果你想对 Puppet 的配置清单在应用到生产环境之前先进行测试, 你可以使用 Puppet 的 environment 特性来做到。 这可以让你根据环境应用不同的配置清单来设置客户机。例如,你可以定

  • 我正在使用一个具有不同测试环境(test、QA、UAT、PROD)Spring boot应用程序的关键云代工,我创建了多个属性文件(每个指向不同的数据库),如 或者,当我转移到更高的环境时,我需要改变吗? 提前道谢。

  • 我有一个Selenium测试,它是在Spock框架的帮助下执行的。一般来说,它是这样的: null

  • 根据Intellij的说法。这是由Spring Cloud Netflix框架自动生成的类型,因此尝试与远程服务进行实际通信。 是否有一种方法可以根据配置设置有条件地重写Feign接口的实现?

  • 对于登录页面自动化,用户需要输入用户id、安全答案和密码。不同的环境有不同的用户。例如,qa和dev环境的用户具有不同的用户id、安全答案和密码。那么在自动化测试中如何妥善处理用户信息呢?我们可以将所有的属性存储在属性文件中,还有其他更好的解决方案吗?

  • 使用以下设置输出 2.6.0:006 环境 > 使用以下设置输出 2.1.2:006 环境 Mozilla Firefox 52.2.0 ruby 2.1.2p95 (2014-05-08修订版45877)[x86_64-linux] Selenium-webdrive-2.53.4