Spring Boot配置文件

配置文件

分为两种配置文件

properties、yml

这两配置文件的语法是不同的

他们两个可以共存,但实际开发只会用其中一种,统一

如果两个同时存在,会优先加载properties配置文件,才会加载yml配置文件。

如果两个配置文件配置了相同的内容,那么会以properties中的配置为主

properties配置文件

语法

K.V=

server.port=8081

从配置文件中读取自定义K.V值

配置文件

MyKey.key=MX

java文件

java 复制代码
//格式要求 必须是 "${}"  从配置文件获取,放入新的变量内
    @Value("${MyKey.key}")
    private String mykey;

    @RequestMapping("hi")
    public String hi(){
        return "Hi,"+mykey;
        //打印
    }

properties的优点

1.格式简单 K.V值

properties的缺点:

相同的前缀需要重复写,不够简便

编码格式默认不是UTF8 重新打开,中文会乱码

解决方案 修改默认编码格式

yml配置文件

可读性高,写法简单

支持更多数据类型 清单,散列表,标量等数据形态

支持更多的编程语言,不止支持java 还支持goland php ruby python..等等

yml默认为UTF8 重新打开 不会乱码

语法

k: v (v前面有空格 不能忘了)

单级目录

java 复制代码
MyKey: MX

多级目录

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/my?characterEncoding=utf8
    name: root
    password: 123456

获取配置文件的值

yml

java 复制代码
MyKey: MX

java文件

java 复制代码
//获取yml的信息
    @Value("${MyKey}")
    private String ymlKey;

    @RequestMapping("hi")
    public String hi(){
        return "Hi,"+mykey+" port: "+prot+" ymlkey: "+ymlKey;
        //打印
    }

示例

yml

java 复制代码
myname:
  name1: xiao \n li
  name2: 'xiao \n wang'
  name3: "xiao \n qiang"

java文件

java 复制代码
@Value("${myname.name1}")
    private String name1;

    @Value("${myname.name2}")
    private String name2;

    @Value("${myname.name3}")
    private String name3;

@RequestMapping("/hi")
    public String hi(){
        System.out.println("--------------");
        System.out.println(name1);
        System.out.println("--------------");
        System.out.println(name2);
        System.out.println("--------------");
        System.out.println(name3);
        return "Hi,"+mykey+" port: "+prot+" ymlkey: "+ymlKey;
        //打印
    }

想要这个方法调用 必须到网站上刷新一次 让这个方法执行一次 才可以看到打印信息

可以看到 双引号会执行里面的特殊符号 而没加或者加单引号的 会原样打印

获取配置文件的类数据 并且存储到spring中

yml

java 复制代码
#两种写法都是可以的
#原始写法
student:
  id: 1
  name: zhangsan
  age: 18

#行内写法
student2: {id: 2,name: lisi,age: 20}

java 复制代码
@Component
@ConfigurationProperties(prefix = "student2")
//从配置文件中读取数据 配置到当前类中 并且存入Spring内
//使用@ConfigurationProperties注解时,实体类不能没有set方法, 因为@ConfigurationProperties类是通过set方法把配置文件的数据赋值给类内字段的
public class Student {
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private int id;
    private String name;
    private int age;
}

启动类

java 复制代码
//从Spring中获取
    @Autowired
    private Student student;
    
    @RequestMapping("/student")
    public String student(){
        return "ID: "+student.getId()+" Name: "+ student.getName()+" age: "+student.getAge();
    }

获取配置文件中的集合数据

java 复制代码
#原始写法
mylist:
  dbtype:
    - list1
    - list2
    - list3

#行内写法
ulist: {name: [name1,name2,name3]}

java 复制代码
@Setter
@Getter
@ConfigurationProperties(prefix = "mylist")
//ConfigurationProperties注解是通过set方法注入的,所以dbtype必须和配置文件中的文件一致
@Component
public class mylist {
    private List dbtype;
}
java 复制代码
@Setter
@Getter
@ConfigurationProperties(prefix = "ulist")
//ConfigurationProperties注解是通过set方法注入的,所以name必须和配置文件中的文件一致
@Component
public class ulist {
    private List name;
}

启动类

java 复制代码
   @Autowired
    private mylist mylist;

    @Autowired
    private ulist ulist;
    
        @RequestMapping("/mylist")
    public String mylist(){
        return mylist.getDbtype().get(0)+" "+mylist.getDbtype().get(1)+" "+mylist.getDbtype().get(2)+" size: "+mylist.getDbtype().size();
    }

    @RequestMapping("/ulist")
    public String ulist(){
        return ulist.getName().get(0)+" "+ulist.getName().get(1)+" "+ulist.getName().get(2)+" size: "+ulist.getName().size();
    }

配置环境文件

在实际开发中会用到多种环境 在切换环境时 修改代码是比较繁琐的,所以可以创建环境文件

环境文件名必须是以**application-**开头 后续名字根据实际定

在主配置文件下,切换环境

只需要切换文件名,就可以完成切换环境

相关推荐
YAy1721 分钟前
CC3学习记录
java·开发语言·学习·网络安全·安全威胁分析
代码小鑫23 分钟前
A035-基于Spring Boot的企业内管信息化系统
java·开发语言·spring boot·后端·spring
qq_35323353891 小时前
【原创】java+ssm+mysql校园疫情防控管理系统设计与实现
java·mvc·javaweb·ssm框架·bs·疫情防控
代码调试4 小时前
Springboot校园失物招领平台
java·spring boot
静水楼台x4 小时前
springboot参数校验
spring boot
camellias_5 小时前
SpringBoot(二十三)SpringBoot集成JWT
java·spring boot·后端
tebukaopu1485 小时前
springboot如何获取控制层get和Post入参
java·spring boot·后端
昔我往昔5 小时前
SpringBoot 创建对象常见的几种方式
java·spring boot·后端
武昌库里写JAVA5 小时前
机器学习笔记2 - 机器学习的一般流程
spring boot·spring·毕业设计·layui·课程设计
q567315235 小时前
用 PHP或Python加密字符串,用iOS解密
java·python·ios·缓存·php·命令模式