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

你可能感兴趣的:(java,前端,服务器)