未从 context.xml 文件中的属性文件获取值
Posted
技术标签:
【中文标题】未从 context.xml 文件中的属性文件获取值【英文标题】:Not getting values from properties files in context.xml file 【发布时间】:2014-01-27 21:18:13 【问题描述】:我无法将 .properties
文件中的值检索到我的 context.xml
中
pom.xml(没有提到依赖)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>myproj</artifactId>
<version>0.1.1</version>
<packaging>war</packaging>
<name>myproj</name>
<url>http://maven.apache.org</url>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
<build.number>0</build.number>
<svn.revision.number>0</svn.revision.number>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/environment</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8</version>
<configuration>
<printSummary>false</printSummary>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<excludes>
<exclude>**/*_Roo_*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.7</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<wtpversion>2.0</wtpversion>
<additionalBuildcommands>
<buildCommand>
<name>org.eclipse.ajdt.core.ajbuilder</name>
<arguments>
<aspectPath>org.springframework.aspects</aspectPath>
</arguments>
</buildCommand>
<buildCommand>
<name>org.springframework.ide.eclipse.core.springbuilder</name>
</buildCommand>
</additionalBuildcommands>
<additionalProjectnatures>
<projectnature>org.eclipse.ajdt.ui.ajnature</projectnature>
<projectnature>com.springsource.sts.roo.core.nature</projectnature>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warName>myproj</warName>
</configuration>
</plugin>
</plugins>
</build>
</project>
context.xml(在 src/main/webapp/META-INF 内)
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Specify a JDBC datasource -->
<Resource name="jdbc/mydb" auth="Container"
type="javax.sql.DataSource" username="$database.usernameee" password="$database.password"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://localhost:9000/common_db"
maxActive="10" maxIdle="4" />
</Context>
我在下面有一些.properties
文件:
src/main/resources
src/main/environment/dev
我无法在 $database.usernameee 和 $database.password
的 context.xml 中获取值请提出问题所在?
【问题讨论】:
谁能告诉我出了什么问题? 您想将相关 *.properties 中的database.username
和 database.password
属性替换为 context.xml
?
@WillKeeling 是的!我更新了上面的代码位,使 执行以下操作:
1) 删除 <resources>
部分。您想要进行的过滤不需要它,src/main/resources
是默认值 - 不需要单独指定。
<build>
<!-- Delete the <resources> section -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/environment</directory>
<filtering>false</filtering>
</resource>
</resources>
2) 在<build>
下添加一个<filters>
元素,指定环境特定的属性文件
<build>
<filters>
<filter>src/main/environment/$env/some.properties</filter>
</filters>
...
以上假设您的属性文件名为some.properties
- 因此将其更改为您的文件的真实名称。
3) 修改maven-war-plugin
的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/META-INF/context.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<warName>myproj</warName>
</configuration>
</plugin>
现在将使用特定于环境的属性过滤context.xml
- 取决于您使用的配置文件。
(请注意,您可能在 'database.usernameee' 中有错字 - 因为它末尾有额外的 ee)
【讨论】:
哇,非常感谢!但我有一个疑问:下面的标签有什么作用?<webResources>
中的 <resource>
标签告诉 maven war 插件过滤 src/main/webapp
文件夹,但在过滤时只包含 context.xml
。是的,您可能可以安全地删除 <webXml>
和 <warSourceDirectory>
,因为它们只是重述默认值。
好的,谢谢! :) 请您回答我的问题 B),这里:***.com/questions/21037291/…
也考虑为您的答案投票,点击箭头进行投票:)【参考方案2】:
如果您想从外部文件(而不是 POM 中的属性)获取 Maven 属性,您应该使用 Maven 过滤器:see here 和 here。
【讨论】:
谢谢! :) ,请您回答我的问题 B),这里:***.com/questions/21037291/…以上是关于未从 context.xml 文件中的属性文件获取值的主要内容,如果未能解决你的问题,请参考以下文章