Spring Boot 指定运行的yml配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 指定运行的yml配置文件相关的知识,希望对你有一定的参考价值。

参考技术A 一般来说,项目中有好几个配置文件,那么怎么指定我们需要运行的配置文件呢?

我们可以利用pom文件,来对 #spring.profiles.active# 这个参数进行动态的修改。

首先,要自定义一个yml的变量符号

之后。设置一些配置

再对打包配置进行一些修改~

这样的话,在idea里面,就可以点击按钮进行切换了。

Spring —— Spring Boot 配置文件

JavaEE传送门

JavaEE

Spring —— Bean 作用域和生命周期

Spring —— Spring Boot 创建和使用


目录


Spring Boot 配置文件

如果没有配置信息, Spring Boot 项目就不能连接和此操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 配置文件的作用是非常重要的.

  1. 系统使用的配置文件 (系统配置文件), 如端口号的配置, 链接数据库的配置
  2. 用户自定义配置文件

Spring Boot 配置文件格式

  1. .properties
  2. .yml (yaml)

# 注意事项 #

  1. 当一个项目中, 存在两种格式的配置文件, 并且两个配置文件间中设置了相同的配置项, 但之不同时. .properties 配置文件的优先级最高, 但加载完 .properties 文件之后, 也会加载 .yml 文件的配置信息.
  2. 理论上讲 .properties 可以和 .yml 共存, 但实际业务中, 我们通常会采用一种统一的配置文件格式, 这样可以更好的维护.

properties配置文件

properties 基本语法

# properies 以键值的形式配置的: key=vaule.

# 设置端口号
server.port=8888

# 我们还可以自定义配置项

myTest=gujiu

我们还可以读取配置项中的内容, 使用 @Value 注解来实现, @Value 注解使用 “$” 的格式读取.

@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController 
    @Value("$myTest")
    private String mytest;

    @RequestMapping("/getconf")
    public String getConfig() 
        return mytest;
    

注: 不可以用 @Value(“myTest”) 读取, 其含义是, 将字符串赋值给 mytest 变量.


properties 缺点

当我们想配置数据库的时候.

# 连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

从上述配置 key 中可以看出, properties 配置文件中会有很多的冗余信息.

想要解决这个问题,就可以使用 yml 配置⽂件的格式化了.


yml 配置文件

yml (YAML - Yet Another Markup Language) 翻译成中文 “另一种标记语言”

yml 优点

  1. yml 是一个可读性高, 写法简单, 易于理解, 他的语法和 JSON 语言类似.
  2. yml 支持更多的数据类型, 它可以简单表达清单 (数组), 散列表, 标量等数据形态, 它使用空白符号缩进和大量依赖外观的特色, 特别时候来表达或编辑数据结构, 各种配置文件等.
  3. yml 支持更多的编程语言, 它不只是 Java 中可以使用在 Golang, PHP, Python, Ruby, JavaScripy, Perl 中.

yml 基本语法

yml 是树形结构的配置文件: key: vaule .

# 注意 # key 和 vaule 直接使用英文冒号加空格的方式组成, 空格不可省略.

# 配置端口
server:
  port: 6666
# 自定义配置  
mytest2: gugu

同样是使用 @Value 注解使用 “$” 的格式读取.

@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController 
    @Value("$mytest2")
    private String myTest;

    @RequestMapping("/getconf2")
    public String getConfig2() 
        return myTest;
     

当我们配置数据库连接

# 配置数据库连接
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: 123456


yml 配置不同类型数据及 null

# 字符串
string.value: Hello

# 布尔值,true或false
boolean.value: true
boolean.value1: false

# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制

# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法

# Null,~代表null
null.value: ~

注意事项:value 值加单双引号

# 字符串
str1: Hello \\n Spring Boot.
str2: 'Hello \\n Spring Boot.'
str3: "Hello \\n Spring Boot."

读取一下, str1, str2, str3.

@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController 
    @Value("$str1")
    private String str1;

    @Value("$str2")
    private String str2;

    @Value("$str3")
    private String str3;

    @PostConstruct
    public void postConstruct() 
        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);
        System.out.println("str3: " + str3);
    

运行结果展示:

# 注意事项 #

  • 字符串默认不⽤加上单引号或者双引号.
  • 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据.
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思.

yml 配置对象

比如: 我们配置一个学生对象

student:
 id: 1
 name: Gujiu
 age: 18

或者使用行内写法

student: id: 1,name: Gujiu,age: 18

读取配置对象

这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另⼀个注解 @ConfigurationProperties 来读取

# 首先要创建一个实体类:

@Component
@ConfigurationProperties(value = "student")
@Data
public class Student 
    private int id;
    private String name;
    private int age;


# 调用类代码

@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController 
    @Autowired
    private Student student;

    @PostConstruct
    public void postConstruct() 
        System.out.println(student);
    


//运行结果: Student(id=1, name=Gujiu, age=18)

yml 配置集合

配置文件也可以配置 list 集合

mynames:
 name:
 - Gujiu
 - GUJIU
 - gugu

或者使用行内写法

mynames: name: [Gujiu,GUJIU,gugu]

读取配置对象

和读取对象一样, 使用 @ConfigurationProperties 来读取

@Component
@ConfigurationProperties("mynames")
@Data
public class ListConfig 
 private List<String> name;


properties VS yml

  • 二者都是 Spring Boot 的配置文件, 二者的诞生时间是不同的. properties 是默认的配置文件, 诞生的比较早. yml 是后来才出现的另一种标记语言的配置文件.
  • properties 是以 key=vaule 的形式配置的键值类型的配置文件, 而 yml 使用的类似 JSON 格式的树形配置方式进行配置的. yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用 “: ” 英文冒号加空格的方式设置,并且空格不可省略.
  • properties 为早期并且默认的配置文件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题
  • yml 通用性更好, 支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置⽂件作为 Java 和 Go 的共同配置文件.
  • yml 功能比较强大, 支持更多的数据类型, 对中文的兼容性非常好.

设置不同环境的配置文件

  1. 创建不同环境的配置文件:

    • application-dev.yml (开发环境)
    • application-prod.yml (生产环境)
  2. application.yml 中设置运行环境:

    # 开发环境
    spring:
      profiles:
    	active: dev
    
    # 生产环境
    spring:
      profiles:
    	active: prod
    

🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

以上是关于Spring Boot 指定运行的yml配置文件的主要内容,如果未能解决你的问题,请参考以下文章

如何获取spring boot application.yml里面的值

Spring Boot

在运行时使用 intellij 在 Spring boot application.yml 文件中注入占位符值

Spring Boot-使用YML文件配置多环境

Spring —— Spring Boot 配置文件

spring boot-4.配置文件