前言
操控程序行为的办法很多,经过变量操控是最常见的办法之一,而变量的运用办法也很多,以 SpringBoot 为例,咱们能够经过 yml、JVM 参数、命令行参数、体系参数等多种手段,指定某些特殊变量,使其在程序运转时收效。
看看常见的 IDEA 变量装备:
本文将以 SpringBoot 为例,讲解实战中怎么设置环境变量。
变量
yml/properties 装备文件
这种文件在 Spring 应该中最为常见,咱们应用程序的首要装备参数都设置在这类文件中。
yml(yaml) 文件 和 properties 文件格局都支持,二者选其一即可,咱们以 yml 文件为例:
spring 默认约定运用 application 作为文件名(前缀),即 application.yml,多环境界说格局:application-{环境}.yml,如:
- 开发:application-dev.yml
- 测试:application-test.yml
- 生产:application-prod.yml
咱们在发动时,指定激活对应的环境即可,如:
项目实战装备格局:
能够看到,除了对应环境的 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
最初:
当然,在服务器环境,运维一般还要指定 jvm 运转参数,以 -X
最初:
- -Xms:设置初始Java堆巨细。例如,-Xms64m表明初始堆巨细为64MB。
- -Xmx:设置最大Java堆巨细。例如,-Xmx256m表明最大堆巨细为256MB。
- …
-D和-X分别表明什么?
在 Java 的 VM options 中,-D
和 -X
参数有不同的意义:
-
-D
:这是设置体系特点的参数。例如,-Dfile.encoding=UTF-8 设置文件编码为 UTF-8。然后能够在程序中经过 System.getProperty(“file.encoding”) 来获取这个特点。 -
-X
:首要用于操控 JVM 的运转环境,例如内存巨细、废物收回等。例如,-Xms64m 设置 JVM 的初始堆内存为 64MB,-Xmx256m 设置 JVM 的最大堆内存为 256MB。
简言之,-D首要是用来设置体系特点,而-X首要是用来设置JVM的运转环境。
Environment variables
操作体系环境变量
,在实践场景中,咱们能够用它来指定数据文件途径、服务发动端口号、激活文件等,如:
总的来说,该变量是操作体系中用来指定运转环境的一些参数,首要效果:
- 装备信息:环境变量常常用于存储体系装备信息,如数据库衔接字符串、文件途径等。这样,应用程序能够在运转时读取这些信息,而无需在代码中硬编码。
- 影响程序行为:某些环境变量能够改变程序的行为。例如,JAVA_HOME 环境变量指定了 Java 安装的方位,PATH 环境变量指定了体系查找可执行文件的目录。
- 区分环境:在不同的运转环境(dev、test、prod)中,能够挑选激活不同的环境文件
- 安全:环境变量常用于存储敏感信息,如密码、密钥等。这样,这些信息就不会出现在代码或装备文件中,能够提高安全性。
在 Java 中,能够经过 System.getenv() 办法来获取环境变量。
Program arguments
设置应用程序的命令行参数
,这些参数会被传递给你的应用程序的main办法。
在 idea 设置办法:
也能够在 java 发动时指定,如:
java Main arg1 arg2 arg3
收效次序
笔者在实战中常用的办法有:yml/properties、JVM 参数、Environment,三者的常见用途是:
- yml/properties文件:首要用于事务参数变量装备,分为 bootstrap.yml、application.yml、application-{环境}.yml
- JVM 参数:本地发动时指定 yml/properties 文件途径、服务称号(服务发动后后会注册到测试环境的注册中心,所以要重新命名)、以及 kafka消费组等参数
- Environment:指定服务发动端口、profile 文件激活等。
既然有这样的办法界说参数,就有或许重复界说,那 Spring 在加载的时分收效的次序是?
- 命令行参数:在Java中,当发动一个程序时,能够在命令行中指定参数,这些参数会被传递给程序的main办法,如:
java Main arg1 arg2 arg3
。 - Java 体系特点(System.getProperties()),以
-D
最初,如java -DmyKey=myValue MyProgram
,发动名为 “MyProgram” 的java程序,并设置一个名为 “myKey” 的体系特点 - 操作体系环境变量,经过 IDEA 中
Environment Variables
设置。 - 装备文件:application-{profile}.properties 或 application.yml
- 装备文件:application.properties 或 application.yml
- 装备文件:bootstrap.yml
以上就是常见的 SpringBoot 变量设置办法,假如你还有其他办法,欢迎弥补!