怀旧网,博客详情:Spring Boot 配置文件讲解

1、Mybatis 详细介绍

2、Spring 详细介绍

3、SpringMVC 详细介绍

4、Vue 使用详细介绍

5、Spring Boot 介绍

6、Spring Boot 配置文件讲解

7、Spring Security 介绍

8、Shiro 介绍

9、Spring Boot 整合 Swagger

10、Spring Boot 任务

11、Redis 详解介绍

12、Docker 使用详细介绍

13、JVM 介绍

14、JUC并发编程

原创

Spring Boot 配置文件讲解

配置文件的作用

配置文件是非常重要的,整个项目中所有的重要数据都是在配置文件中进行配置的例如:

  • 数据库的连接信息(用户名和密码的设置);
  • 项目启动的端口;
  • 第三方系统调用的秘钥信息;
  • 可以发现和定位问题的普通日志和异常日志等(日志的级别和持久化);

如果没有配置文件的话,这些信息就无法进行配置了,数据库无法连接,日志无法查看等这些问题都是对于Spring Boot项目非常关键的,因此配置文件是特别重要的!

测试使用配置文件

通过配置文件修改访问界面的端口

image-20240417152727283

默认访问是8080端口:现在修改配置文件!

server.port=80

修改后重新启动:

image-20240417152829670

成功修改了项目的端口号!

在配置文件中可以修改Spring Boot所有配置!可以参考: 网页链接

读取配置文件

在配置文件中创建如下属性:

name=怀旧
password=123456

创建实体类 User.class

正常注入属性值:

@Component
public class User {
    @Value("怀旧")
    private String name;
    @Value("123456")
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String toString() {
        return "User{name = " + name + ", password = " + password + "}";
    }
}

使用测试:

@SpringBootTest
class TestApplicationTests {
    @Autowired
    private User user;

    @Test
    void contextLoads() {
        System.out.println(user);
    }
}

image-20240417153546164

成功输出结果!

现在使用配置文件注入,修改实体类:

@Value("${name}")
private String name;
@Value("${password}")
private String password;

image-20240417153648155

注入成功,但是输出中文乱码,这种情况需要修改idea的配置!

image-20240417153721221

修改完成后,文件内容自动乱码,修改文件内容

image-20240417153757402

name=怀旧
password=123456

重新测试:

image-20240417153819407

数据获取成功!

Spring Boot 读取其他配置文件

当我们在目录下创建了一个自己的配置文件

image-20240417153926250

name1=怀旧111
password1=65432

修改实体类读取自定义的配置文件:

@Value("${name1}")
private String name;
@Value("${password1}")
private String password;

测试运行:

image-20240417155529794

运行报错,原因是自定义的配置文件不会被springboot托管,导致读取不到自定义配置文件中的数据,解决方案如下:

@PropertySource(value = "classpath:test.properties") // 在实体类上添加这个注解,指定需要使用的配置文件名名称,即可
public class User {

测试运行:

image-20240417155637676

获取数据成功!

Spring Boot 配置yum格式配置文件

创建一个名为 application.yml 的配置文件

image-20240417160013967

配置文件的写法如下(配置端口):

image-20240417160112263

它是以 冒号 分割开并且每个值后面都必须有一个空格编写

我们可以在这个配置文件中定义在properties中的数据:

name: 怀旧
password: 123456

修改之前的实体类代码:

@Component
public class User {
    @Value("${name}")
    private String name;
    @Value("${password}")
    private String password;

运行测试:

image-20240417160323437

数据获取成功!

但是对于yml格式的配置文件来说,它的功能还远远不止如此:

yum 格式配置文件功能扩展

1、直接注入一个实体类的所有属性

修改配置文件:

person:
  name: 怀旧11
  password: 123456

修改实体类:

@Component
@ConfigurationProperties(prefix = "person") // 指定装配配置文件下的那个属性
public class User {
    private String name;
    private String password;

测试运行:

image-20240417160719401

获取数据成功!

2、注入一个对象

创建一个实体类 Cat.java

@Component
public class Cat {
    private String name;
    private Integer age;
    
    public Cat() {
    }

    public Cat(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String toString() {
        return "Cat{name = " + name + ", age = " + age + "}";
    }
}

修改 User.class

@Component
@ConfigurationProperties(prefix = "person")
public class User {
    private String name;
    private String password;
    private Cat cat;

添加一个对象属性:并编写get,set,toString方法!

编写配置文件:

person:
  name: 怀旧11
  password: 123456
  cat:
    name: 小黄
    age: 5

测试运行:

image-20240417160958187

对象属性注入成功!

在对象属性中,还有一种写法,如下:

person:
  name: 怀旧11
  password: 123456
  cat: {name: 小黄, age: 3}

测试运行:

image-20240417161046272

结果同样输出成功!

3、在yml中注入其他类型数据

person:
  name: 怀旧11
  password: 123456
  cat: {name: 小黄, age: 3}
  # 注入 数组/列表
  list1:
    - aa
    - bb
    - cc
  # 注入 boolean 数据
  flag: false
  # 注入 Map
  map1:
    aa: bb
    cc: dd
  # 日期
  date1: 2024/4/17

编写对应实体类获取数据:

@Component
@ConfigurationProperties(prefix = "person")
public class User {
    private String name;
    private String password;
    private Cat cat;
    private List<String> list1;
    private boolean flag;
    private Map<String, String> map1;
    private Date date1;

测试运行:

输出结果如下:

User{
    name = 怀旧11, 
    password = 123456, 
    cat = Cat{name = 小黄, age = 3}, 
    list1 = [aa, bb, cc], 
    flag = false, 
    map1 = {aa=bb, cc=dd}, 
    date1 = Wed Apr 17 00:00:00 CST 2024}

所有数据都获取成功!

4、yum 配置文件的高级玩法

生成随机数:

  password: ${random.int}

image-20240417161721640

再次运行:

image-20240417161735229

生成一个uuid:

  name: ${random.uuid}

image-20240417161812036

判断属性:

password: ${person.hello:hello111} #作用; 判断person.hello是否存在,如果存在或/有值 则password的值就为person.hello 否则值为 hello111

测试:当前没有 person.hello ,获取password应该是一个默认值hello111

image-20240417162108238

修改配置:

  password: ${person.name:hello111}

当前name存在,所以 password 就等于 person.name 的值

image-20240417162154317

JSR 303 数据校验

注解:

@Null  被注释的元素必须为null
@NotNull  被注释的元素不能为null
@AssertTrue  被注释的元素必须为true
@AssertFalse  被注释的元素必须为false
@Min(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min)  被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction)  被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past  被注释的元素必须是一个过去的日期
@Future  被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Email 被注释的元素必须是电子邮件地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty  被注释的字符串必须非空
@Range  被注释的元素必须在合适的范围内

使用介绍博客:网页链接

配置文件的优先级

image-20240502135248637

多环境切换

image-20240502135155469

image-20240502135234527

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言