Java - jar 文件的 Spring 属性文件配置

Posted

技术标签:

【中文标题】Java - jar 文件的 Spring 属性文件配置【英文标题】:Java - Spring property file configuration for jar file 【发布时间】:2012-08-26 16:14:03 【问题描述】:

Java-Spring 我有基于模块的项目,我有 DAO 层模块和业务层模块,它依赖于 DAO 层和 Web 层依赖于 DAO 层和业务层。

我正在使用 maven 进行项目编译。每个组件的 jar 和 jar 都在 web 项目 lib 文件夹下。

问题是我在 DAO jar 中有 spring 上下文文件和 .property 文件,以下是我的配置,但我 spring 无法加载属性我也尝试在 value="classpath:abc.properties 前添加前缀,但它没有用。

当我打开 DAO jar 时,spring 上下文和 .properties 文件都在根目录下。

<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="abc.properties" />
  </bean>

<bean id="cmfModelDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="$jdbc.ConnectionUrl"/>
      <property name="username" value="$jdbc.Username"/>
      <property name="password" value="$jdbc.Password"/>
  </bean>

知道如何快速解决这个问题吗?

【问题讨论】:

你试过classpath*:abc.properties吗? 支持以上评论:***.com/questions/3294423/… 我假设你得到的错误是 FileNotFoundException?你能发布完整的东西来确定吗? 你试过用classloader.getResource()加载指定的资源,有没有给你异常? 【参考方案1】:

我有一个使用以下代码的 Spring 多模块 Web 项目:

<context:property-placeholder location="classpath:env/env.properties" />

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

不要忘记验证xml文件中的命名空间url:

xmlns:context="http://www.springframework.org/schema/context";

文件夹 env 必须在类路径中,这样 Spring 才能找到它。我的属性文件也在一个罐子里,它工作得很好。

【讨论】:

【参考方案2】:

我遇到了这个错误,int 可能与您初始化上下文的方式有关,例如在我的 Web 应用程序中,问题出在我在 web.xml 文件中设置的过滤器上。此外,我最终使用的不是 xml 文件,而是一个带注释的配置类,并将其放在 web.xml 中:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextClass</param-name>
    <param-value>
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.myapp.configuration.SpringConfig</param-value>
</context-param>

如果您真的想使用 xml 文件,您必须将 AnnotationConfigWebApplicationContext 更改为 XmlWebApplicationContext。你应该告诉我们你是如何初始化你的上下文的(比如代码或 web.xml,如果这不能解决你的问题)

【讨论】:

以上是关于Java - jar 文件的 Spring 属性文件配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring:如何将属性文件提供给 Java.exe

java.lang.IllegalStateException:无法从jar文件spring-plugin-core-1.2.0.RELEASE.jar的清单中读取Class-Path属性

Spring Cloud Spring Boot mybatis分布式微服务云架构属性配置文件详解

spring boot importsource怎么设置加载顺序

如何在 EAR 中打包属性文件和 JAR?

从命令行启动应用程序时,如何将 Spring Boot 应用程序 jar 中的文件作为 -D 属性值引用?