2

我有用于 spring 批处理作业的 application-context.xml 文件,它使用属性占位符从 database.properties 读取值。

我正在使用 pom 文件来构建 tar.gz 文件。

我在 unix 机器上构建并解压缩它。然后在检查应用程序上下文文件后,它的占位符值被更改为 maven url。

以下正在发生。

构建之前:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driverClassName}" />
            <property name="url"
                    value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" /></bean>

在执行 maven 安装后通过以下方式进行更改:

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driverClassName}" />
            <property name="url"
                    value="http://maven.apache.org" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
 </bean>

在 pom 文件中声明了 'url' 变量,该变量的 url 值被替换。pom 中的变量是否会改变它在 application -context 文件中的值?为什么 pom 会读取/编辑应用程序上下文文件?

任何人都可以面临同样的问题吗?感谢您的帮助。

4

3 回答 3

2

您正在使用 Maven 过滤文件。

过滤时,maven 会像在 POM 中一样替换文件中的占位符。如果您想动态分配值,这非常有用。

在您的情况下,maven 使用的占位符与 Spring 使用的占位符相同,因此您有多种选择:

1) 转义占位符,如此

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          ...
          <escapeString>\</escapeString>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>

然后在文件中你会有\${}

2)更改maven的分隔符

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          ...
          <delimiters>
            <delimiters>@</delimiters>
          </delimiters>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>

这将解决您的问题,但如果您依赖于其他地方的过滤,则需要更改这些文件。

3)在这里禁用过滤。这可能是最简单的解决方案,但也可能会破坏。

于 2013-11-08T10:52:17.030 回答
1

这称为资源过滤。它由 maven-resources-plugin 完成,可以在 POM 中关闭。

有关详细信息,请参阅文档

于 2013-11-08T10:52:09.540 回答
0

可能,通过过滤“maven-resources-plugin”更改了 URL: http ://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

其他一些插件也支持过滤,检查 pom.xml。

于 2013-11-08T10:52:28.370 回答