0


springboot yml文件自定义配置的读取、使用 字符串 数组 对象 集合

.yml 配置

# 自定义开发环境端口 默认本地 9801
# serverPort: 9801
spring:
  profiles: dev
# 环境的配置
server:
  port: 9801

# 自定义对象/配置
student:
  name: 李四
  age: 25
  jobs: #数组方式1                                      @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
    - java
      linux
      123
  loves: [看电影,玩游戏,游泳,aaaa,456] # 数组方式2        @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
  books: 水浒,西游,红楼梦,三国 # 数组方式3                @所有方式都可获取
  frands: # List方式1                                  @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
    - 李雷
      韩梅梅
      本山
  familys: [李父,李牧,李姐,李弟,456] # List方式2         @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
  organ: 眼,#耳,.#口,鼻 # List方式3                        @所有方式都可获取

# 对象集合                                              @ConfigurationProperties 方式可以获取并封装成对象集合
users:
  user:
    - name: tom
      age: 18
    - name: 韩梅梅
      age: 15

controller代码

import com.tencent.gateway.entity.Student;
import com.tencent.gateway.entity.User;
import com.tencent.gateway.entity.Users;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.springframework.core.env.Environment;
import org.springframework.beans.factory.annotation.Value;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/test")
public class TestController {

    //方式1:对象中使用 @ConfigurationProperties 加载配置到对象属性中
    @Autowired
    private Student student;//配置文件对应的对象
    @Autowired
    private Users users;//配置文件对应的对象集合

    @GetMapping("/test1")
    public Object test1(){
        System.out.println("方式1:@ConfigurationProperties 获取配置:");
        System.out.println();
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(Arrays.toString(student.jobs));
        System.out.println(Arrays.toString(student.loves));
        System.out.println(Arrays.toString(student.books));
        System.out.println(student.frands.toString());
        System.out.println(student.familys.toString());
        System.out.println(student.organ.toString());

        System.out.println();
        System.out.println("usersList:");
        for (User user: users.user){
            System.out.println(user.name);
            System.out.println(user.age);
        }

        return "success";
    }

    //方式2:使用 Environment
    @Autowired
    Environment env;

    @GetMapping("/test2")
    public Object test2(){
        System.out.println("方式2:Environment 获取配置:");
        System.out.println();
        System.out.println(env.getProperty("server.port"));
        System.out.println(env.getProperty("student.name"));
        System.out.println(env.getProperty("student.age"));
        System.out.println(env.getProperty("student.jobs"));    //获取不到
        System.out.println(env.getProperty("student.loves"));   //获取不到
        System.out.println(env.getProperty("student.books"));   //          可以获取
        System.out.println(env.getProperty("student.frands"));  //获取不到
        System.out.println(env.getProperty("student.familys")); //获取不到
        System.out.println(env.getProperty("student.organ"));   //          可以获取
        return "success";
    }

    //方式3:使用 @Value 映射 获取指定配置参数值, 冒号后的1111为默认值
    @Value("${server.port:1111}")
    private String port;
    @Value("${student.name}")
    public String name;
    @Value("${student.age}")
    private int age;
    @Value("${student.jobs:}")
    private String[] jobs;
    @Value("${student.loves:}")
    private String[] loves;
    @Value("${student.books:}")
    private String[] books;
    @Value("${student.frands:a,a,a,a}")//冒号后指定默认值
    private List<String> frands;
    @Value("${student.familys:}")
    private List<String> familys;
    @Value("#{'${student.organ}'.split(',')}") //使用指定分割符分割字符串数组(部分字符不支持,比如 .)
    private List<String> organ;
    @Value("#{'${student.organ}'.split('#')}") //使用指定分割符分割字符串数组(部分字符不支持,比如 .)
    private List<String> organ2;

    @GetMapping("/test3")
    public Object test3(){
        System.out.println("方式3:@Value 映射 获取配置:");
        System.out.println();
        System.out.println(port);
        System.out.println(name);
        System.out.println(age);
        System.out.println(Arrays.toString(jobs));  //获取不到
        System.out.println(Arrays.toString(loves)); //获取不到
        System.out.println(Arrays.toString(books)); //          可以获取
        System.out.println(frands.toString());      //获取不到
        System.out.println(familys.toString());     //获取不到

        System.out.println();
        System.out.println("organ:(逗号分割)");
        System.out.println(organ.toString());       //          可以获取
        for (String organSplit: organ){
            System.out.println(organSplit);
        }

        System.out.println();
        System.out.println("organ2:(号分割)");
        System.out.println(organ2.toString());      //          可以获取
        for (String organSplit: organ2){
            System.out.println(organSplit);
        }

        return "success";
    }
}

实体类

Student.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "student")
public class Student {

    public String name;

    public int age;

    public String[] jobs;

    public String[] loves;

    public String[] books;

    public List<String> frands;

    public List<String> familys;

    public List<String> organ;

    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;
    }

    public String[] getJobs() {
        return jobs;
    }

    public void setJobs(String[] jobs) {
        this.jobs = jobs;
    }

    public String[] getLoves() {
        return loves;
    }

    public void setLoves(String[] loves) {
        this.loves = loves;
    }

    public List<String> getFrands() {
        return frands;
    }

    public void setFrands(List<String> frands) {
        this.frands = frands;
    }

    public List<String> getFamilys() {
        return familys;
    }

    public void setFamilys(List<String> familys) {
        this.familys = familys;
    }

    public String[] getBooks() {
        return books;
    }

    public void setBooks(String[] books) {
        this.books = books;
    }

    public List<String> getOrgan() {
        return organ;
    }

    public void setOrgan(List<String> organ) {
        this.organ = organ;
    }
}

Users.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "users")
public class Users {

    public List<User> user; //自动将users.user下的所有数组封装到User对象集合中

    public List<User> getUser() {
        return user;
    }

    public void setUser(List<User> user) {
        this.user = user;
    }
}

User.java

public class User {
    public String name;
    public int age;

    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;
    }
}

方式一、

http://localhost:9801/test/test1

方式二、

http://localhost:9801/test/test2

方式三、

http://localhost:9801/test/test3

参考:

SpringBoot:yml文件详解-CSDN博客

https://www.jb51.net/article/216769.htm

标签: spring boot yml

本文转载自: https://blog.csdn.net/torpidcat/article/details/130870888
版权归原作者 torpidcat 所有, 如有侵权,请联系我们删除。

“springboot yml文件自定义配置的读取、使用 字符串 数组 对象 集合”的评论:

还没有评论