Java 使用Spring和Webapp属性占位符查找属性
这是一个“简单”的问题,我正在寻找一个如何做和/或一个你是哑巴,不要这样做。我对两者都持开放态度 我正在构建一个war文件,并希望结构为:Java 使用Spring和Webapp属性占位符查找属性,java,spring,web-applications,properties,war,Java,Spring,Web Applications,Properties,War,这是一个“简单”的问题,我正在寻找一个如何做和/或一个你是哑巴,不要这样做。我对两者都持开放态度 我正在构建一个war文件,并希望结构为: WEB-INF/ properties/ <my properties files> classes/ ... spring/ <my spring files> WEB-INF/ 性质/ 班级/ ... 弹簧/ 那是不是很蠢?我知道我可以通过属性占位符访问属性文件,但我不希望将属性嵌套在类部分
WEB-INF/
properties/
<my properties files>
classes/
...
spring/
<my spring files>
WEB-INF/
性质/
班级/
...
弹簧/
那是不是很蠢?我知道我可以通过属性占位符访问属性文件,但我不希望将属性嵌套在类部分,这对我来说没有意义
因此,Spring文件如下所示:
<context:property-placeholder location="classpath:properties/*.properties" />
如果我想在类区域中访问它们。我以为
<context:property-placeholder location="properties/*.properties" />
让我直接把目录放在WEB-INF下……我错了吗(ps我想我错了:)
有什么建议吗?我不知道你想达到什么目的。下面是我用来将基本属性文件中的属性注入bean的方法: 在spring文件(XMLBean定义)中,我添加了对属性文件(myfile.properties)的引用:
默认情况下,如果属性文件中未定义该属性,Spring将使用系统属性(此行为可以更改)。您不能按照自己的方式执行,因为类加载器的类路径将是/classes目录和/lib目录中的任何JAR。这是war文件的标准配置 WAR和EAR具有特定的配置,您必须遵循这些配置才能使文件有效。仔细想想,如果没有标准格式,那么很难让不同的供应商提供可以部署相同war文件的web容器。有一个问题 为了实现与您想要的类似的功能,您可以简单地拥有/classes/properties和/classes/spring目录,并从类路径(“classpath:properties/myfile.properties”)中适当地查找它们。这应该可以做到
<context:property-placeholder location="WEB-INF/properties/*.properties" />
WEB-INF不是WEB应用程序的根目录,因此需要将WEB-INF添加到路径中
我可以访问属性-这是我想要文件的位置。而不是WEB-INF/classes/properties/*。属性我更喜欢WEB-INF/properties/*。属性我认为spring文件的首选位置是WEB-INF/spring/。我记不起我在哪里读到的-但你在WEB.xml文件中设置了它。我不知道在您构建之前,您认为目录是“spring”,但一旦生成WAR,所有目录都会以“类”结束,从而在类路径上结束。这可能不是您的愿望,但WAR结构已经标准化;您不应该尝试自定义它。我将不使用属性文件:)。顺便说一句,spring文件不是copie看看petshop。它是由Maven构建的,它直接复制WEB-INF,然后将src/main/resources复制到WEB-INF/classes/中,属性通常位于src/main/resources中
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- results in a setDriverClassName(String) call -->
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${db.login}</value></property>
<property name="password"><value>${db.password}</value></property>
</bean>
<context:property-placeholder location="WEB-INF/properties/*.properties" />
<xsd:attribute name="location" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
<![CDATA[
The location of the properties file to resolve placeholders against, as a Spring
resource location: a URL, a "classpath:" pseudo URL, or a relative file path.
Multiple locations may be specified, separated by commas. If neither location nor properties-ref is
specified, placeholders will be resolved against system properties.
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>