当前位置: 首页 > 知识库问答 >
问题:

使用Maven设置。Spring上下文中的xml属性

闾丘选
2023-03-14

我有一个Maven设置。我的~/中的xml文件。m2目录;看起来是这样的:

<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>

我想使用这些属性两次

  • 一旦进入Maven的集成测试阶段,就可以设置并拆除我的数据库。使用Maven过滤,这是完美的工作
  • 第二次是在运行Spring应用程序时,这意味着我需要将这些属性替换到我的servlet上下文中。Maven的resources:resources阶段中的xml文件。有关设置的上半部分中的属性。xml,例如${db.url},这样做很好。我不知道如何将我的数据库用户名和(解密的)密码替换到Springservlet上下文中。xml文件

我的servlet上下文的相关部分。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设置(以及他们自己机器上的数据库,用于集成测试)...詹金斯服务器上也有类似的设置。我们不想共享一个共同的用户名/密码/等。

共有3个答案

常波鸿
2023-03-14

我还没有尝试过,但是根据这个maven wiki页面,您应该能够在设置中引用属性。xml使用设置 前缀。因此,${settings.servers.server.username}最好在设置中返回用户名。xml

丌官向荣
2023-03-14

我建议你在中间使用一个属性文件。我的意思是:Spring应用程序将使用上下文加载属性文件中的属性值:属性占位符,而Maven将使用来自settings.xml的值替换${...}变量。

您的财产文件:

db.driver=${db.driver}
db.url=${db.url}
username=${username}
password=${password}

您的servlet上下文。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>
冀弘厚
2023-03-14

有一种通过配置Maven War插件来过滤web资源的方法。看看这个官方插件的文档片段。

顺便说一句,我强烈建议重新考虑这种基于过滤的方式,以便在构建时提供事实上的运行时配置。请注意,您必须重新生成相同的代码,以便为另一个环境准备包(或者编辑包内容)。您可以使用ApplicationServer的特定功能(至少JBoss有一个)或使用Spring,AFAIR也可以这样配置。

 类似资料:
  • 根据文档http://cxf . Apache . org/docs/async-client-http-transport . html,我试图通过使用上下文属性“use.async.http.conduit”来强制使用HttpAsyncClient 然而,我不知道在哪里/如何在我的应用程序中设置这些类型的上下文属性。 我通过以下方式使用基于代理的客户端 有人知道如何设置这些上下文属性并强制使用

  • 我正在尝试将Spring security与Apache Wink应用程序集成。REST服务与spring和working Fine集成。 当我在spring上下文中进行更改以添加spring安全性时,我开始出现following following错误。 13:53:08,199错误[org.springframework.web.Context.contextloader](ServerSer

  • 我对react、react hooks和js/ts非常陌生。 目前,我正在编码一个简单的按钮,它通过useContext获取一个状态,并通过useReucer和调度函数更新该状态。 我试图将我所有的代码分离到特定的文件中。来自减速器的调度函数在提供程序中作为值传递。 当我在使用者组件中调用传递的函数时,我可以给它一个任何类型的值(在我的示例中是数字)给调度器。我在上下文、reducer等中设置了所

  • 问题内容: 配置 : Spring 2.5,Junit 4,Log4j 从系统属性中指定log4j文件位置 在运行时,使用-D java选项设置系统属性。一切都很好。 问题/我需要什么: 在单元测试时,未设置系统属性,并且文件位置未解析。 App使用Spring,想简单地配置Spring以 设置 系统属性。 更多信息: 要求仅用于配置。无法引入新的Java代码或IDE中的条目。理想情况下,Spri

  • 我想用Spring Boot来外部化我的配置,但我想继续部分使用我的xml上下文。 我的主类SpringServerApplication.java: 我将配置放在application.properties中。 但它不起作用。提前感谢你的帮助。

  • 问题内容: 我正在尝试根据某个Maven配置文件是否处于活动状态来使用数据库信息配置Spring配置文件。我已经看到了一些答案,但是很难将它们放在一起。 我有一个这样的Maven个人资料: 还有一个settings.xml文件,如下所示: 并在servlet-context.xml中: 我的问题基本上是,如何将Maven属性放入servlet- context.xml文件中?我需要一个.prope