在Spring上下文中使用Maven settings.xml属性
我的~/.m2
目录中有一个Maven settings.xml
文件; 它看起来像这样:
<settings>
<profiles>
<profile>
<id>mike</id>
<properties>
<db.driver>org.postgresql.Driver</db.driver>
<db.type>postgresql</db.type>
<db.host>localhost</db.host>
<db.port>5432</db.port>
<db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>mike</activeProfile>
</activeProfiles>
<servers>
<server>
<id>server_id</id>
<username>mike</username>
<password>{some_encrypted_password}</password>
</server>
</servers>
</settings>
我想要使用这些属性两次
integration-test
阶段后,即可设置并拆除我的数据库。 使用Maven过滤,这是完美的。 resources:resources
阶段将这些属性替换为我的servlet-context.xml
文件。 对于settings.xml
上部分的settings.xml
,例如${db.url}
,这可以正常工作。 我无法弄清楚如何将我的数据库用户名和(解密)密码替换为Spring servlet-context.xml
文件。 我的servlet-context.xml
文件的相关部分如下所示:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>${db.driver}</value></property>
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${username}</value></property>
<property name="password"><value>${password}</value></property>
</bean>
这里的最终目标是让每个开发人员都拥有自己的Maven设置(以及自己的机器上的数据库进行集成测试)......并且在Jenkins服务器上进行类似的设置。 我们不想分享一个共同的用户名/密码/等。
有一种通过配置Maven War Plugin过滤Web资源的方法。 从官方插件的文档中查看这个片段。
顺便说一下,我强烈建议重新考虑这种基于过滤的方式,以便在构建时提供事实上的运行时配置。 请注意,您必须重新编译相同的代码才能为其他环境准备软件包(或者编辑软件包内容)。 您可以使用应用程序服务器的具体内容(至少JBoss有一个)或使用Spring,AFAIR也可以像这样配置。
我建议你在中间使用一个属性文件。 我的意思是:Spring应用程序将使用context:property-placeholder
加载属性文件的属性值context:property-placeholder
和Maven将使用过滤来使用settings.xml中的值替换$ {...}变量。
你的财产档案:
db.driver=${db.driver}
db.url=${db.url}
username=${username}
password=${password}
你的servlet-context.xml
文件
<context:property-placeholder location="classpath:your-property-file.properties" />
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>${db.driver}</value></property>
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${username}</value></property>
<property name="password"><value>${password}</value></property>
</bean>
在你的pom.xml中
<resources>
...
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
我还没有尝试过,但根据这个maven wiki页面,您应该能够使用settings.
来引用settings.xml
中的settings.
字首。 因此${settings.servers.server.username}
应该在settings.xml
返回username
。
上一篇: Using Maven settings.xml properties inside Spring context
下一篇: PerformanceCounter.NextValue() throws InvalidOperationException