如何使用pom中的属性设置glassfish-resources.xml中jdbc-connection-pool属性的值。
例如,我的pom.xml
...
<profiles>
<profile>
<id>dev</id>
<properties>
<database.dbname>Xpto</database.dbname>
...
</properties>
</profile>
...
</profiles>
...
和glassfish-resources.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<custom-resource res-type="java.util.Properties" jndi-name="jndi/iprofile"
factory-class="org.glassfish.resources.custom.factory.PropertiesFactory">
<property name="name" value="${webapp.profile}" />
</custom-resource>
<jdbc-resource enabled="true" jndi-name="jdbc/users" object-type="user" pool-name="MY-POOL">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.microsoft.sqlserver.jdbc.SQLServerXADataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="MY-POOL" non-transactional-connections="false" ping="false" pool-resize-quantity="2" pooling="true" res-type="javax.sql.XADataSource" statement-cache-size="0" statement-leak-reclaim="false" statement-leak-timeout-in-seconds="0" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="serverName" value=""/>
<property name="PortNumber" value=""/>
<property name="DatabaseName" value=""/>
<property name="User" value=""/>
<property name="Password" value=""/>
</jdbc-connection-pool>
我想设置DatabaseName属性,其值为pp中定义的值Xpto。其他配置文件具有database.dbname属性的不同值。
答案 0 :(得分:1)
您可以使用maven-replacer-plugin解决此类任务。它可以用来替换文件中的值。
以下是一个例子:
像您一样定义您的财产:
<properties>
<database.dbname>Xpto</database.dbname>
</properties>
在glassfish-resources.xml
中更改要替换的媒体资源,如下所示:
<property name="DatabaseName" value="DATABASENAME"/>
值DATABASENAME
用于替换。您可以使用任何值,但在要修改的文件中它必须是唯一的。
将maven-war-plugin
的配置更改为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>prepare-war</id>
<phase>prepare-package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
<execution>
<id>default-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
</configuration>
</execution>
</executions>
</plugin>
目前,replacer插件需要访问目标资源 在将其打包到存档之前。但是,标准的WAR包装 不会公开Web资源(src / main / webapp下的任何内容)以供使用 在其他插件中并作为单个执行运行。幸运的是,我们可以 调用war:爆炸以在构建中更早地复制这些资源 生命周期,以便maven-replacer-plugin可以使用它们。该 然后,标准包使用将使用修改后的Web资源 创建WAR工件。
将maven-replacer-plugin
的以下配置添加到pom.xml
:
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>target/${project.build.finalName}/WEB-INF/glassfish-resources.xml</file>
<token>DATABASENAME</token>
<value>${database.dbname}</value>
</configuration>
</plugin>
正如您所见,令牌DATABASENAME
已替换为${database.dbname}
的值。这是在prepare-package
阶段完成的,即在将Web应用程序内容复制到爆炸的WAR目录之后,但在将目录打包为WAR文件之前。
如果替换无效,您可能需要将maven-war-plugin
降级为 2.0.1 版本。
如果要替换多个不同的值,可以使用以下内容替换配置中的标记和值:
<replacements>
<replacement>
<token>DATABASENAME</token>
<value>${database.dbname}</value>
</replacement>
</replacements>
另见: