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