- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 Spring 3.1 应用程序。假设它有一个包含以下内容的 XML:
<context:property-placeholder location="classpath:somename.properties" />
<context:property-placeholder location="classpath:xxx.properties" />
我希望始终加载 some.properties (假设它存在),但第二个占位符的 xxx 部分将根据 Activity 配置文件被某个名称替换。我已经尝试过这个:
<beans profile="xx1">
<context:property-placeholder location="classpath:xx1.properties" />
</beans>
<beans profile="xx2">
<context:property-placeholder location="classpath:xx2.properties" />
</beans>
此外,这两个文件的属性具有相同的键但不同的值。
但是它不起作用,因为后来的一些 bean 具有一个属性的占位符,其键在 xx1.properties(和 xx2.properties)中定义,这使得 Spring 提示在应用程序上下文中找不到该键。
最佳答案
你可以这样做:
<context:property-placeholder location="classpath:${spring.profiles.active}.properties" />
它工作正常,但在同时使用多个配置文件时可能不适应。
<小时/>声明 2 个属性占位符时,如果第一个占位符不包含所有应用程序键,则应将属性忽略 unresolvable = true,以便可以使用第二个占位符。我不确定这是否是您想要做的,如果您希望 xx1 和 xx2 配置文件同时处于 Activity 状态,则可能是这样。
请注意,像这样声明 2 个 propertyplaceholders 会使它们相互独立,并且在 xx2.properties 的声明中,您不能重用 xx1.properties 的值。
<小时/>如果您需要更高级的东西,您可以在应用程序启动时注册 PropertySource。
web.xml
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.xxx.core.spring.properties.PropertySourcesApplicationContextInitializer</param-value>
</context-param>
您创建的文件:
public class PropertySourcesApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private static final Logger LOGGER = LoggerFactory.getLogger(PropertySourcesApplicationContextInitializer.class);
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
LOGGER.info("Adding some additional property sources");
String profile = System.getProperty("spring.profiles.active");
// ... Add property sources according to selected spring profile
// (note there already are some property sources registered, system properties etc)
applicationContext.getEnvironment().getPropertySources().addLast(myPropertySource);
}
}
完成后,您只需在上下文中添加:
<context:property-placeholder/>
恕我直言,这是处理 spring 属性的最佳方法,因为您不再到处声明本地属性,您可以通过编程控制正在发生的事情,并且属性源 xx1 值可以在 xx2.properties 中使用。
<小时/>在工作中我们正在使用它并且效果很好。我们注册了 3 个额外的属性(property)来源:- 基础设施:由 Puppet 提供- 配置文件:根据配置文件加载不同的属性。- 通用:包含默认值,当所有配置文件共享相同的值等时...
关于java - 根据配置文件在 Spring 中加载属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821359/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!