System.getProperty,System.getenv().get(),environment.getProperty区别

启动类:

@SpringBootApplication
public class M2Application {
    public static void main(String[] args) {
        System.setProperty("a.x","xx_xx");  // 如果放到run下面不会生效并且在后续System.getProperty("a.x")也是null
                                            // 如果-D 或者 环境变量中也设置了,生效的还是这里
        SpringApplication.run(M2Application.class, args);
    }
}

 监听启动的类中:

@Component
@RequiredArgsConstructor
public class InitEventListener {

    @Autowired
    private Environment environment;
    @Autowired
    private CongfigInfo congfigInfo;

    @EventListener
    public void onApplicationReady(ApplicationReadyEvent event){
        //-Da.b=tt a.z=ztt   enviroment:env=env_env;a.c=env_cc;a.z=env_tt    yml:a.b=bb  a.c=cc z=zz a.x=xx

        // 只能获取-D设置参数,获取不到yml的值
        System.out.println(System.getProperty("a.b"));
        System.out.println(System.getProperty("env"));
        System.out.println(System.getProperty("a.c"));   // tt null null

        System.out.println();
        System.out.println();
        // 只能获取环境变量
        System.out.println(System.getenv().get("a.b"));
        System.out.println(System.getenv().get("env"));
        System.out.println(System.getenv().get("a.c"));     //null env_env  env_cc

        System.out.println();
        System.out.println();
        // 所有的都可以获取
        System.out.println(environment.getProperty("a.b"));
        System.out.println(environment.getProperty("env"));
        System.out.println(environment.getProperty("a.c"));     // tt env_env  env_cc

        System.out.println();
        System.out.println();
        // -D会影响yml的值  环境变量会影响yml的值  如果两个同事设置了同一个元素,生效的是-D 
         //(可能是-D晚了一步设置覆盖了环境设置的)
        System.out.println(congfigInfo.getB());
        System.out.println(congfigInfo.getC());
        System.out.println(congfigInfo.getZ());
        System.out.println(congfigInfo.getX());     // tt env_cc ztt xx_xx


        System.out.println();
        System.out.println();
        System.setProperty("a.b","xx_bb");
        System.out.println(congfigInfo.getB());     // tt   这里上面没有生效是因为spring已 
       //经启动了,已经赋完值了,并且代码中动态获取@Value("${a.b}") 获取的也是tt,
        //如果是在启动类中设置就会生效
        System.out.println(System.getProperty("a.b"));  // xx_bb
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值