代码之家  ›  专栏  ›  技术社区  ›  Rishi Prakash

System.getenv(/**vName**/)&Auto-wiring Environment和doing Environment.getProperty(“myProp”)之间的区别;

  •  0
  • Rishi Prakash  · 技术社区  · 5 年前

    我明白 System.getenv(/**vName**/) 获取附加了vName变量的环境属性,但我想知道是否也可以使用下面的方法来获得相同的结果?

    @Autowired
        private Environment environment;
    environment.getProperty(/**vName**/);
    

    有区别吗?我们什么时候该用哪一个?

    代码正在工作

    @Autowired
        private Environment env; <---**I am not sure how this env is getting used?**
    
        @Value("${someURLVriable}")
        String APIURLTest;
    
        @Bean(name = "restTemplate")
        public RestTemplate restTemplate(RestTemplateBuilder builder) {
    
            String env = System.getenv("environment");<--**eclipse giving warning here.**
            String baseURL = System.getenv("illustrationAPIURL");
            if (baseURL == null) {/** If baseURL comes null i.e it must be on local/test Env **/
                baseURL = APIURLTest;
                env = "DEV";
            }
    
            log.info("Environment loaded : {}.", env);
            log.info("loaded apiURL : {}.", baseURL);
            return builder.rootUri(baseURL).build();
    
        }
    

    如果你觉得这个问题有点傻,要有礼貌,没有一个 恰当的评论

    2 回复  |  直到 5 年前
        1
  •  2
  •   rieckpil    5 年前

    System.getenv("XYZ") 您只需访问操作系统的环境变量。如果你用弹簧的 Environment 抽象,您不仅可以在操作系统的环境变量中搜索属性,还可以在以下位置搜索属性:

    属性 在几乎所有的应用程序中都扮演着重要的角色,并且 源于多种来源:属性文件、JVM系统属性、系统 环境变量,JNDI,servlet上下文参数,特殊属性对象, 地图,等等。环境对象相对于属性的作用是 为用户提供配置属性源的方便服务接口 并从中解析属性。-环境接口的JavaDoc

    因此,Spring实际上会根据正在运行的应用程序的活动概要文件,在更多的地方(如JNDI或ServletContextParameters)搜索您请求的属性。如果你不需要这个额外的 搜索 在多个地方注入一个环境变量( 暗示 :系统属性之间存在差异 -DmyName=foo 和环境变量 FOO_BAR=duke ),然后您可以使用 System.getenv(“XYZ”)

        2
  •  1
  •   P3arl    5 年前

    可以使用 Environment 并且可以像这样读取env属性

    @SpringBootApplication
    public class Application implements CommandLineRunner {
    
        private static final Logger logger = LoggerFactory.getLogger(Application.class);
    
        @Autowired
        private Environment env;
    
        @Override
        public void run(String... args) throws Exception {
    
            logger.info("{}", env.getProperty("JAVA_HOME"));
            logger.info("{}", env.getProperty("app.name"));
        }
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    更新:

    在下面,您将使用属性文件值,并将使用属性值,例如。

    应用程序.属性

    path: {HOME}/dir
    

    代码如下:

    @SpringBootApplication
    public class Application implements CommandLineRunner {
    
        private static final Logger logger = LoggerFactory.getLogger(Application.class);
    
        @Value("${path}")
        private String path;
    
        @Override
        public void run(String... args) throws Exception {
           logger.info("value from property is: {}", path));
    
        }
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    更新时间: 而且,可以在简单Java类中使用的System.getEnv方法也不需要spring自动连接。