前言

操控程序行为的办法很多,经过变量操控是最常见的办法之一,而变量的运用办法也很多,以 SpringBoot 为例,咱们能够经过 yml、JVM 参数、命令行参数、体系参数等多种手段,指定某些特殊变量,使其在程序运转时收效。

看看常见的 IDEA 变量装备:

SpringBoot 环境变量

本文将以 SpringBoot 为例,讲解实战中怎么设置环境变量。

变量

yml/properties 装备文件

这种文件在 Spring 应该中最为常见,咱们应用程序的首要装备参数都设置在这类文件中。

yml(yaml) 文件 和 properties 文件格局都支持,二者选其一即可,咱们以 yml 文件为例:

spring 默认约定运用 application 作为文件名(前缀),即 application.yml,多环境界说格局:application-{环境}.yml,如:

  • 开发:application-dev.yml
  • 测试:application-test.yml
  • 生产:application-prod.yml

咱们在发动时,指定激活对应的环境即可,如:

SpringBoot 环境变量

项目实战装备格局:

SpringBoot 环境变量

能够看到,除了对应环境的 yml 装备,还存在 bootstrap.yml 和 application.yml 文件,详细有什么区别?

  • bootstrap.yml:首要用于体系发动的时分加载的一些装备信息。比方,运用 Apollo 装备中心的时分,就能够在这个文件中指定 Apollo Server 的地址。
  • application.yml:是 Spring Boot 的主装备文件,界说通用特点(提炼抽取变量)
  • application-{profile}.yml:特定环境下的装备,能够经过 spring.profiles.active={profile} 进行激活装备。

假如都界说了相同特点怎么挑选?

假如你在 bootstrap.yml、application.yml 和 application-{profile}.yml 中界说了相同的特点,那么:

  • application-{profile}.yml 中的特点值会覆盖 application.yml 中的特点值,
  • application.yml 中的特点值会覆盖 bootstrap.yml 中的特点值。

JVM 参数

一般在发动程序时,指定的特殊值(体系特点),比方指定装备文件地址、应用程序称号等,以 -D 最初:

SpringBoot 环境变量

当然,在服务器环境,运维一般还要指定 jvm 运转参数,以 -X 最初:

  • -Xms:设置初始Java堆巨细。例如,-Xms64m表明初始堆巨细为64MB。
  • -Xmx:设置最大Java堆巨细。例如,-Xmx256m表明最大堆巨细为256MB。

-D和-X分别表明什么?

在 Java 的 VM options 中,-D-X 参数有不同的意义:

  1. -D:这是设置体系特点的参数。例如,-Dfile.encoding=UTF-8 设置文件编码为 UTF-8。然后能够在程序中经过 System.getProperty(“file.encoding”) 来获取这个特点。
  2. -X:首要用于操控 JVM 的运转环境,例如内存巨细、废物收回等。例如,-Xms64m 设置 JVM 的初始堆内存为 64MB,-Xmx256m 设置 JVM 的最大堆内存为 256MB。

简言之,-D首要是用来设置体系特点,而-X首要是用来设置JVM的运转环境。

Environment variables

操作体系环境变量,在实践场景中,咱们能够用它来指定数据文件途径、服务发动端口号、激活文件等,如:

SpringBoot 环境变量

总的来说,该变量是操作体系中用来指定运转环境的一些参数,首要效果:

  1. 装备信息:环境变量常常用于存储体系装备信息,如数据库衔接字符串、文件途径等。这样,应用程序能够在运转时读取这些信息,而无需在代码中硬编码。
  2. 影响程序行为:某些环境变量能够改变程序的行为。例如,JAVA_HOME 环境变量指定了 Java 安装的方位,PATH 环境变量指定了体系查找可执行文件的目录。
  3. 区分环境:在不同的运转环境(dev、test、prod)中,能够挑选激活不同的环境文件
  4. 安全:环境变量常用于存储敏感信息,如密码、密钥等。这样,这些信息就不会出现在代码或装备文件中,能够提高安全性。

在 Java 中,能够经过 System.getenv() 办法来获取环境变量。

Program arguments

设置应用程序的命令行参数,这些参数会被传递给你的应用程序的main办法。

在 idea 设置办法:

SpringBoot 环境变量

也能够在 java 发动时指定,如:

java Main arg1 arg2 arg3

收效次序

笔者在实战中常用的办法有:yml/properties、JVM 参数、Environment,三者的常见用途是:

  1. yml/properties文件:首要用于事务参数变量装备,分为 bootstrap.yml、application.yml、application-{环境}.yml
  2. JVM 参数:本地发动时指定 yml/properties 文件途径、服务称号(服务发动后后会注册到测试环境的注册中心,所以要重新命名)、以及 kafka消费组等参数
  3. Environment:指定服务发动端口、profile 文件激活等。

既然有这样的办法界说参数,就有或许重复界说,那 Spring 在加载的时分收效的次序是?

  1. 命令行参数:在Java中,当发动一个程序时,能够在命令行中指定参数,这些参数会被传递给程序的main办法,如:java Main arg1 arg2 arg3
  2. Java 体系特点(System.getProperties()),以-D最初,如 java -DmyKey=myValue MyProgram,发动名为 “MyProgram” 的java程序,并设置一个名为 “myKey” 的体系特点
  3. 操作体系环境变量,经过 IDEA 中 Environment Variables设置。
  4. 装备文件:application-{profile}.properties 或 application.yml
  5. 装备文件:application.properties 或 application.yml
  6. 装备文件:bootstrap.yml

以上就是常见的 SpringBoot 变量设置办法,假如你还有其他办法,欢迎弥补!