Spring 属性文件在';它在一个罐子里

Spring 属性文件在';它在一个罐子里,spring,properties,jar,classpath,Spring,Properties,Jar,Classpath,我的属性文件有问题,因为我在JAR中部署了我的应用程序。当它位于WEB-INF/classes目录中时,没有问题。我的问题只发生在JAR中的属性文件上 让我解释一下。我将简化我的代码 我的应用程序处理称为IPX的业务对象(知道它是什么没用) 有一个名为IpxDaoImpl的DAO类,它具有字符串属性,即SQL查询 public class IpxDaoImpl implements IpxDao extends SimpleJdbcDaoSupport { private String li

我的属性文件有问题,因为我在JAR中部署了我的应用程序。当它位于WEB-INF/classes目录中时,没有问题。我的问题只发生在JAR中的属性文件上

让我解释一下。我将简化我的代码

我的应用程序处理称为IPX的业务对象(知道它是什么没用)

有一个名为IpxDaoImpl的DAO类,它具有字符串属性,即SQL查询

public class IpxDaoImpl implements IpxDao extends SimpleJdbcDaoSupport {
  private String listAllIpxSql; // query for listing IPX in Database

  public void listAllIpx() {
    // Does a query in Database using the variable listAllIpxSql
    // ...
  }

  public void setListAllIpxSql(String listAllIpxSql) {
    this.listAllIpxSql = listAllIpxSql;
  }
}
此类在名为appContext-dao.xml的配置xml文件中定义。它包括:

<bean id="ipxDao" class="com.IpxDaoImpl" parent="myGenericDao">

  <property name="listAllIpxSql" value="${ipx.list}" />

</bean>
<context:property-placeholder location="classpath*:**/sql.properties" />
ipx.list=SELECT * FROM IPX
现在,当我在WEB-INF/classes中部署应用程序时,一切都很好。但是我们有一个集成环境,在那里我们必须生成JAR。我上面提到的所有文件都在同一个jar中。然后,当我部署时,出现了以下错误: 无法解析占位符“ipx.list” 似乎找不到属性文件sql.properties

我已经尝试提取这个属性文件,并将它放在WEB-INF/classes目录下的适当文件夹中。现在它开始工作了

那么,我的代码有什么问题?是那个洞穴探险者吗? 提前谢谢


Cedric

尝试使用
类路径:/sql.properties

参考文献:

请注意,“classpath*:”与Ant样式模式组合时 将仅在前至少一个根目录下可靠地工作 模式启动,除非实际目标文件驻留在该文件中 系统


有关详细信息,请参阅。

不确定这是否是您的问题,但属性占位符中的“classpath”后面不应该有星号。sql.properties存储在项目中的什么位置?它在生成的JAR中的什么位置?有几个sql.properties,在不同的文件夹中,但有一个共同的根(类似于com/mypackages)。有几个sql.properties文件,所以我宁愿尝试classpath*:com/mypackages/**/sql.properties它可以工作!我离开了classpath*,但是我写了包含不同sql.properties文件的公共文件夹的开头。因此,这个解决方案可以工作:classpath*:com/mypackages/**/sql.properties谢谢!