gpt4 book ai didi

java - 使用 Maven 和 Spring 控制项目 : How to set Spring config file using Maven profiles?

转载 作者:IT老高 更新时间:2023-10-28 13:48:42 26 4
gpt4 key购买 nike

我正在尝试根据某个 Maven 配置文件是否处于 Activity 状态来配置包含数据库信息的 Spring 配置文件。我已经看到了这方面的一些答案,但我无法将它们放在一起。

我有一个这样的 Maven 配置文件:

<profiles>
<profile>
<id>production</id>
<activation>
<property>
<name>environment.type</name>
<value>prod</value>
</property>
</activation>
</profile>

<profile>
<id>development</id>
<activation>
<property>
<name>environment.type</name>
<value>dev</value>
</property>
</activation>

<!-- Database properties for Spring -->
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.type>oracle</db.type>
<db.host>192.168.0.0</db.host>
<db.port>1521</db.port>
<db.name>myDb</db.name>
<db.url>jdbc:${db.type}:thin:@${db.host}:${db.port}:${db.name}</db.url>
</properties>

还有一个像这样的 settings.xml 文件:

<servers>
<server>
<id>development</id>
<username>jsmith</username>
<password>secret</password>
</server>
</servers>

....

<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>

<properties>
<environment.type>dev</environment.type>
</properties>
</profile>
</profiles>

在 servlet-context.xml 中:

<bean id="dataSource" 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>${db.username}</value>
</property>

<property name="password">
<value>${db.password}</value>
</property>

<property name="maxActive">
<value>10</value>
</property>

<property name="maxIdle">
<value>1</value>
</property>
</bean>

我的问题基本上是,如何将 Maven 属性放入 servlet-context.xml 文件中?我需要一个 .properties 文件吗?我对 Maven 中的过滤和 Spring 中的 PropertyPlaceholderConfigurer 了解一些,但我不知道如何将它们组合在一起——或者它们是否组合在一起?还是有更简单的方法?

最佳答案

我需要一个 .properties 文件吗?

一般来说,是的,你需要使用.properties文件,这是我们通常做的,尤其是在spring上下文文件中处理数据库连接配置。

.properties 文件的目的是提供在应用程序运行时配置数据库连接的能力(对于 Web 应用程序,通常需要在 .properties 文件更改后重新启动应用程序容器/服务器)。这通常在不同环境(DEV/TEST/UAT/PROD)中的应用程序部署/安装步骤中完成。

将这些数据库连接设置存储在 pom.xml 中并不是一个好习惯,因为 pom.xml 的目的是用于项目描述并且仅在应用程序构建时使用一次(例如 mvn deploy)。而且在大多数情况下,即使它被打包到最终的 jar/war 文件中,我们也不会真正关心并在构建应用程序后对其进行修改。

要在 spring 上下文中使用 .properties 文件,请在 applicationContext 中定义一个 propertyConfigurer bean,例如:

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- Default location inside war file -->
<value>classpath:db.properties</value>
<!-- Environment specific location, a fixed path on server -->
<value>file:///opt/my-web-app/conf/db.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
</bean>

希望这是有道理的。

关于java - 使用 Maven 和 Spring 控制项目 : How to set Spring config file using Maven profiles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com