excerpt
<!-- more -->
## 怎么取环境变量
```java
@QmqConsumer(prefix = "${qmq.hotel.data.team.min.price.update.prefix}")
public void onMessage(Message message) { }
这个${}中取redis.properties的配置,是怎么实现的,谁来帮忙实现的?
@Value("${abnormal.standard.price.redis.namespace}")
private String adrPriceRedisNamespace;
```
在 Java 应用程序中,特别是在使用 Spring 框架时,`${}` 这种占位符通常用于从外部配置文件中动态地读取配置值。在你提供的代码示例中,`@QmqConsumer(prefix = "${qmq.hotel.data.team.min.price.update.prefix}")` 这行代码使用了这种占位符机制来设置注解的属性值。
具体到如何实现这一功能,一般由以下几个组件协作完成:
1. **属性文件**(如 `redis.properties`):这是一个包含了应用程序各种配置的文件。这个文件中的每一个属性可以通过其唯一的键来访问,例如 `qmq.hotel.data.team.min.price.update.prefix`。
2. **Spring 的环境抽象**:Spring 框架提供了一个环境抽象 (`Environment`),它是一个用于访问属性的接口,可以从多个来源读取属性,如 JVM 属性、系统环境变量和属性文件等。
3. **属性源配置**(`PropertySources`):在 Spring 应用程序中,属性文件(如 `application.properties`, `redis.properties` 等)被加载到环境的属性源中。这通常是通过配置类中的 ```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```0 注解实现的。
4. **```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```1 注解或 ```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```2**:这些是 Spring 提供的注解,用于将配置文件中的值注入到 Spring 管理的 bean 中。在你的示例中,属性值通过 ```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```3 注解动态注入到了前缀属性中。
5. **解析占位符**:Spring 的 ```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```4 是一个 bean 后处理器,它对容器中所有 bean 的属性和构造函数参数中的占位符进行解析和替换。
在你的示例中,这一过程通常是由 Spring 框架自动完成的,开发者只需确保正确配置属性源并使用正确的注解。如果你使用的是 Spring Boot,这个过程会更加自动化和简化,因为 Spring Boot 有一个内置的机制来自动配置和加载属性文件。
## 一个 springboot 项目怎么确定走哪套配置环境
mvn 编译的时候会传一个参数,
**```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```5** - 指定一个构建配置文件(Profile),例如,```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```6 在生产配置下执行安装。
```shell
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=false -Denforcer.requireBom.level=error -Denforcer.requireBom.recordBomVersion=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoahrouter -pl h_polaris_web -am
mvn -U -V clean package dependency:tree -Dverbose -DoutputFile=cm_build_dependency.tree -Denforcer.skip=true -Denforcer.bds.deployType=beta -Dbds.deployType=beta -Dgit.srcRoot=http://gitlab.xx.git -Dgit.branchName=FD-243950 -Dmaven.test.skip=true -DskipTests -Dbds.username=yishou.liu -T 4 -DcheckDeployRelease_skip=true -P betanoah -pl h_polaris_web -am
```