找不到多个上下文的属性:property-placeholder

我使用带有弹簧轮廓的弹簧3.1来装载豆子。 在我的应用程序上下文文件中,我加载了以下属性:

 

然后我使用属性值来加载数据源bean

  

它工作正常。 当我添加几个属性占位符以便可以加载某些数据库表的属性时,问题就开始了。

这使用加载的属性引用

    

要添加到详细信息,此configFactoryBean使用datasource从数据库加载属性。

当我这样做时,我有以下例外:

 java.lang.ClassNotFoundException: ${database.driverClassName} 

我的分析是它试图在从第一个上下文属性占位符解析属性之前加载datasource 。 我可能错了。 或者可能没有正确解析spring profile变量。

任何人都可以帮我解决这个问题。

谢谢Akki

有关多个属性占位符的错误可能与您的问题有关: https : //jira.spring.io/browse/SPR-9989

将多个PropertyPlaceholderConfigurer@Value批注和占位符语法的默认值(即${key:defaultValue} )结合使用时,仅使用第一个PropertyPlaceholderConfigurer 。 如果此配置器不包含所需的值,则即使第二个PropertyPlaceholderConfigurer包含该值,它也会回@Value默认值。

影响版本:3.1.3

每个都会创建一个PropertyPlaceholderConfigurer的新实例 – 它很容易变得混乱。 每个应用程序和应用程序级别应该有一个这样的东西,而不是库的一个 – 这使维护更容易。

有关详细信息和建议如何处理它,请查看此处: http : //rostislav-matl.blogspot.cz/2013/06/resolving-properties-with-spring.html

在我的应用程序中,我使用property-placeholder configurer以下面的方式,它工作得很好。 你可以试试。

    classpath*:META-INF/spring/*_${spring.profiles.active}.properties    

我认为这应该可以解决您的问题。 🙂

由于您已建议对配置文件的路径进行硬编码,因此请尝试使用标记上的profiles属性来有选择地包含配置。

       

请参阅此文章解释配置文件: http : //java.dzone.com/articles/using-spring-profiles-xml