前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现EnvironmentAware接口

实现EnvironmentAware接口

原创
作者头像
JQ实验室
发布2022-11-26 15:34:12
9230
发布2022-11-26 15:34:12
举报
文章被收录于专栏:实用技术实用技术

有个需求是

将配置文件中的属性放置到系统环境变量中,可以使用System.get获取到;

这个时候使用EnvironmentAware最是方便;原因是:

  • 所有的配置信息,都会加载到Environment实体中,因此我们可以通过这个对象来获取系统的配置,通过这种方式不仅可以获取application.yml配置信息,还可以获取更多的系统信息;
  • 凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量。

使用Vaule注解也可以获取到配置中的属性

代码如下:

代码语言:txt
复制
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class MyEnvironmentAware implements EnvironmentAware {

    @Value("${web..url}")
    String webUrl;

    @Value("${user.name}")
    String userName;
    @Value("${user.password}")
    String password;

    @Override
    public void setEnvironment(Environment environment) {
        System.out.println(webUrl);
       
        System.out.println(environment.getProperty("web.url"));
        System.out.println(System.setProperty("web.url",webUrl));
     
    }
}

关于Environment

Environment表示整个应用运行时的环境即Spring应用所处的环境。

Environment在容器中是一个抽象的集合,是指应用环境的2个方面:profiles和properties。

profile配置是一个被命名的、bean定义的逻辑组,这些bean只有在给定的profile配置激活时才会注册到容器。Environment环境对象的作用,对于profiles配置来说,它能决定当前激活的是哪个profile配置,和哪个profile是默认。 只有当一个profile处于active状态时,它对应的逻辑上组织在一起的这些Bean定义才会被注册到容器中。

properties属性可能来源于properties文件、JVM properties、system环境变量、JNDI、servlet context parameters上下文参数、专门的properties对象,Maps等等。Environment对象的作用,对于properties来说,是提供给用户方便的服务接口、方便撰写配置、方便解析配置。

  • 绝大数情况下,bean都不需要直接访问Environment对象,而是通过类似@Value注解的方式把属性值注入进来。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档