当前位置: 首页 > 知识库问答 >
问题:

Spring上下文:属性占位符不能重新排序嵌套变量

廖绍辉
2023-03-14
<context:property-placeholder location="WEB-INF/spring-integration/spring-integration.properties" ignore-resource-not-found="true" />    
<import resource="classpath*:META-INF/spring/applicationContext.xml" />
<context:property-placeholder location="classpath:META-INF/application.properties, classpath:META-INF/db.properties"  ignore-resource-not-found="true"/>
<import resource="classpath:META-INF/spring/applicationContext-data.xml"/>

其中导入包括DAOs的Spring配置,在applicationContext-data.xml中我有:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${db.${db.type}.driver}" />
       <property name="url" value="${db.${db.type}.url}"/>
       <property name="username" value="${db.${db.type}.username}" />
       <property name="password" value="${db.${db.type}.password}" />       
    </bean>

当我运行项目服务的单元测试时,一切都很好,所有变量都正确地解析了,没有任何问题。但是当我运行project-web(project-service将作为。jar文件包含在project-web的WEB-INF/lib文件夹中)时,它会在启动过程中抛出错误,说不能解析${db.type}:

org.springframework.beans.factory.beanDefinitionStoreException:在类路径资源[META-INF/spring/applicationcontext-data.xml]中定义的名称为“data source”的bean定义无效:无法解析org.springframework.beans.factory.config.placeholderconfigurersupport.doProcessProperties(:174)~[spring-context-3.1.3.release.jar:3.1.3.release]在

注意:我不能在project-web中声明所有内容,因为project-service也将被其他项目使用。有人知道为什么在project-service中,当它单独运行时工作,而当它包含在Project-Web中时却不工作吗?它无法解析嵌套变量${db.type}

共有1个答案

邢灿
2023-03-14

问题是您的第一个PropertyPlaceHolderConfigurer试图解析需要由第二个解析的占位符。

您可以为每个前缀使用不同的前缀(例如!{而不是为其中一个使用${),或者设置

忽略-unresolvable=“true”

 类似资料:
  • 我不明白为什么不能在Spring-Boot中向application.properties文件中注入值。外部属性添加到logging.file变量中。我有一个application.properties文件,看起来如下所示 具有相应的Spring-boot应用程序类 请注意,如果我自己注入服务器端口号,那么在注入和启动应用程序时没有任何问题。 我在这个问题上兜圈子,弄不清自己做错了什么。

  • 我有一个使用Spring Boot 1.5.1和Spring Data Rest的数据库服务。我将我的实体存储在MySQL数据库中,并使用Spring的PagingAndSorting Repository通过REST访问它们。我发现这表明支持按嵌套参数排序,但我找不到按嵌套字段排序的方法。 我有以下课程: 例如,当使用该方法时: 并调用 URI http://localhost:8080/peo

  • 问题内容: 有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。 我正在使用Spring 3.0.4。 XML: config.properties: 问题答案: 这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等 XML: Props:

  • 问题内容: 出于明显的原因,下面的代码(Java Concurrency in Practice清单16.3)不是线程安全的: 但是,在几页之后的16.3节中,它们指出: 如果 是不变的,则实际上是安全的。 我不明白那句话: 如果是不可变的,则任何观察该变量的线程都将看到该变量为null或已完全构建(由于Java内存模型提供了对最终字段的有力保证) 然而,没有什么能够阻止指令重新排序:在特定的两次

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。

  • 我有一个SpringBoot应用程序。对于Thymeleaf,对于此属性文件: 在控制器上: 在模板上: 但我在浏览器上看到: