IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java从零到架构师第③季】【41】SpringBoot-配置文件_YAML_lombok_设置Banner -> 正文阅读

[Java知识库]【Java从零到架构师第③季】【41】SpringBoot-配置文件_YAML_lombok_设置Banner


持续学习&持续更新中…

守破离


应用程序配置文件

在这里插入图片描述

比如:

在这里插入图片描述

注意:

  • 是项目(project)的根路径,而不是模块(module)的根路径
  • Maven管理的项目,resources目录下的文件会被编译到classpath(target/calsses/)下
    在这里插入图片描述

配置文件的内容

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-application-property-files

在这里插入图片描述

server.port=8080
server.servlet.context-path=/sb_cf

在这里插入图片描述

运行参数、VM选项

在这里插入图片描述

不想通过命令行启动jar,而是想通过IDEA设置让IDEA启动项目的话,配置步骤如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

或者通过VM选项:

在这里插入图片描述

application配置文件

在这里插入图片描述

application.properties:

plain=normal_plain
names=lpruoyu, lp, ruoyu
scores={'lpruoyu':111, 'lp':222, 'ruoyu':333}
homes={'lpruoyu':'SX', 'lp':'BJ', 'ruoyu':'NF'}
@RestController
public class TestController {
    @Value("${plain}")
    private String plain;
    @Value("${names}")
    private String[] names;
//    List、Set和数组一样
//    private List<String> names;
//    private Set<String> names;

    @Value("#{${scores}}")
    private Map<String, Integer> scores;
    @Value("#{${homes}}")
    private Map<String, String> homes;

    @GetMapping("/test")
    public String test() {
        for (String name : names) {
            System.out.println(name);
        }
        scores.forEach((k, v) -> {
            System.out.println(k + "_" + v);
        });
        homes.forEach((k, v) -> {
            System.out.println(k + "_" + v);
        });
        return "running success!";
    }
}

lombok

官网:https://projectlombok.org/

在这里插入图片描述

在这里插入图片描述

我的这个IDEA版本已经自动安装好了lombok插件,因此不用安装插件。

在这里插入图片描述

lombok依赖:

在这里插入图片描述

	<dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok</artifactId>
	    <scope>provided</scope>
	</dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
    </dependency>

在这里插入图片描述

在这里插入图片描述

@Component
@ConfigurationProperties("person")
@Data
// @Data >= @Getter + @Setter + @ToString
public class Person {
    private Integer id;
    private Integer age;
    private String name;

    // List、Set、数组,yml的写法是一样的
    private String[] nickNames;
}
person:
  id: 1
  age: 22
  name: lpruoyu
  nick-names:
    - lp2
    - ruoyu2
    - lpx2
#  nick-names: [lp1, ruoyu1, lpx1]
#  nick-names: lp, ruoyu, lpx

YAML

在这里插入图片描述

server:
  port: 8888
  servlet:
    context-path: /yml

#name: lp
name: "lp\truoyu"
@RestController
public class TestController {
    @Value("${name}")
    private String name;

    @GetMapping("/test")
    public String test() {
        System.out.println(name);
        return "test" + name;
    }
}

在这里插入图片描述

YAML—属性绑定1

属性绑定的本质是通过setter方法设置的

第一种绑定方式

application.yml:

id: 10
age: 22
@Component
public class Person {
    @Value("${id}")
    private Integer id;
    @Value("${age}")
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", age=" + age +
                '}';
    }
}
@RestController
public class TestController {
    @Value("${name}")
    private String name;
    @Autowired
    private Person person;

    @GetMapping("/test")
    public String test() {
        System.out.println(person);
        return "test" + name;
    }
}

第二种绑定方式

application.yml:

person:
  id: 1
  age: 22
@Component
@ConfigurationProperties("person")
public class Person {
    private Integer id;
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", age=" + age +
                '}';
    }
}

YAML—属性绑定2

在这里插入图片描述

person:
  id: 1
  name: lpruoyu
  nick-names: [ lp1, ruoyu1, lpx1 ]
  dog:
    age: 10
    name: hz
  dogs:
    - age: 10
      name: hz1
    - age: 11
      name: hz2
  hobbies:
    - childhood: run
    - youth: basketball
    - manhood: infinity
#  hobbies: {
#    childhood: run,
#    youth: basketball,
#    manhood: infinity
#  }
@Component
@ConfigurationProperties("person")
@Data
public class Person {
    private Integer id;
    private String name;
    // List、Set、数组,yml的写法是一样的
    private String[] nickNames;
    private Map<String, String> hobbies;
    private Dog dog;
    private List<Dog> dogs;

    @Data
    private static class Dog {
        private Integer age;
        private String name;
    }
}
@RestController
public class TestController {
    @Autowired
    private Person person;

    @GetMapping("/test")
    public String test() {
        System.out.println(person);
        return "test";
    }
}

在这里插入图片描述

@ConfigurationProperties("student")
// @ConfigurationProperties(prefix = "student")
@Data
public class Student {
    private Integer id;
    private String name;
    // List、Set、数组,yml的写法是一样的
    private String[] nickNames;
    private Map<String, String> hobbies;
    private Dog dog;
    private List<Dog> dogs;

    @Data
    private static class Dog {
        private Integer age;
        private String name;
    }
}
student:
  id: 1
  name: lpruoyu
  nick-names:
    - lp1
    - ruoyu1
    - lpx1
  dog:
    age: 10
    name: hz
  dogs:
    - age: 10
      name: hz1
    - age: 11
      name: hz2
  hobbies:
    - childhood: run
    - youth: basketball
    - manhood: infinity

@RestController
@EnableConfigurationProperties(Student.class)
public class TestController {
    @Autowired
    private Student student;

    @GetMapping("/test")
    public String test() {
        System.out.println(student);
        return "test";
    }
}

YAML—构造方法绑定

在这里插入图片描述

cat:
  id: 1
  name: lpruoyu
  nick-names:
    - lp
    - ruoyu
    - lpx
  dog:
    age: 10
    name: hz
  dogs:
    - age: 10
      name: hz
    - age: 11
      name: hz
  hobbies:
    - childhood: run
    - youth: basketball
    - manhood: infinity
//@ConfigurationProperties(prefix = "cat")
// @ConfigurationProperties(value = "cat")
@ConfigurationProperties("cat")
// 由于是通过构造方法注入的,因此不需要getter、setter,于是不使用@Data
@ToString
@ConstructorBinding
public class Cat {
    private Integer id;
    private String name;
    private String[] nickNames;
    private Map<String, String> hobbies;
    private Dog dog;
    private List<Dog> dogs;

    public Cat(Integer id, String name, String[] nickNames, Map<String, String> hobbies, Dog dog, List<Dog> dogs) {
        this.id = id;
        this.name = name;
        this.nickNames = nickNames;
        this.hobbies = hobbies;
        this.dog = dog;
        this.dogs = dogs;
    }

    @ToString
    @ConstructorBinding
    public static class Dog {
        private Integer age;
        private String name;

        public Dog(Integer age, String name) {
            this.age = age;
            this.name = name;
        }
    }
}
@RestController
@EnableConfigurationProperties(Cat.class)
public class TestController {
    @Autowired
    private Cat cat;

    @GetMapping("/test")
    public String test() {
        System.out.println(cat);
        return "test";
    }
}

YAML—@ConfigurationProperties与@Bean

在这里插入图片描述

@Data
public class Person {
    private Integer id;
    private String name;
    private String[] nickNames;
    private Map<String, String> hobbies;
    private Dog dog;
    private List<Dog> dogs;

    @Data
    public static class Dog {
        private Integer age;
        private String name;
    }
}
person:
  id: 1
  name: lpruoyu
  nick-names:
    - lp
    - ruoyu
    - lpx
  dog:
    age: 10
    name: hz
  dogs:
    - age: 10
      name: hz
    - age: 11
      name: hz
  hobbies:
    - childhood: run
    - youth: basketball
    - manhood: infinity
@Configuration
public class BeanConfiguration {
    @Bean
    @ConfigurationProperties("person")
    public Person person() {
        return new Person();
    }
}
@RestController
public class TestController {
    @Autowired
    private Person person;

    @GetMapping("/test")
    public String test() {
        System.out.println(person);
        return "test";
    }
}

YAML—宽松绑定

在这里插入图片描述

拆分配置文件

在这里插入图片描述

@Component
@ConfigurationProperties("jdbc")
@Data
public class JdbcProperties {
    private String driverClassName;
    private String username;
    private String password;
    private String url;
}
@RestController
public class TestController {
    @Autowired
    private JdbcProperties jdbcProperties;

    @GetMapping("/test")
    public String test() {
        return jdbcProperties.toString();
    }
}

application.yml:

# 公共配置

spring:
  profiles:
    active: development
server:
  port: 8888
  servlet:
    context-path: /yml

---

# 开发环境
spring:
  profiles: development
jdbc:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test_mybatis?useSSL=false
  username: employee01
  password: employee01

---

# 上线环境
spring:
  profiles: production
jdbc:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/lp_resume?useSSL=false
  username: root
  password: root

在这里插入图片描述

在这里插入图片描述

application.yml:

# 公共配置
spring:
  profiles:
    active: development
server:
  port: 8080

application-development.yml:

# 开发环境
jdbc:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test_mybatis?useSSL=false
  username: employee01
  password: employee01

application-production.yml:

# 上线环境
jdbc:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/lp_resume?useSSL=false
  username: root
  password: root

如果公共配置文件(application.yml)内容过多的话,还可以将公共配置文件的内容再拆分出来:

application.yml:

# 公共配置
spring:
  profiles:
    active:
      - development
      - port
      - ctx
#    active: development, port, ctx
#    active: [development, port, ctx]

application-ctx.yml:

server:
  servlet:
    context-path: /yml

application-port.yml:

server:
  port: 8080

设置Banner

  • Banner官网说明:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-banner
  • Banner生成:http://patorjk.com/software/taag

在这里插入图片描述

在这里插入图片描述

resources/banner.txt:

  _
 | |
 | |  _ __    _ __   _   _    ___    _   _   _   _
 | | | '_ \  | '__| | | | |  / _ \  | | | | | | | |
 | | | |_) | | |    | |_| | | (_) | | |_| | | |_| |
 |_| | .__/  |_|     \__,_|  \___/   \__, |  \__,_|
     | |                              __/ |
     |_|                             |___/
    ┌─┐       ┌─┐
 ┌──┘ ┴───────┘ ┴──┐
 │                 │
 │       ───       │
 │  ─┬┘       └┬─  │
 │                 │
 │       ─┴─       │
 │                 │
 └───┐         ┌───┘
     │         │
     │         │    ${AnsiColor.BRIGHT_MAGENTA}神兽保佑,永无bug${AnsiColor.DEFAULT}
     │         │
     │         └──────────────┐
     │                        │
     │                        ├─┐
     │                        ┌─┘
     │                        │
     └─┐  ┐  ┌───────┬──┐  ┌──┘
       │ ─┤ ─┤       │ ─┤ ─┤
       └──┴──┘       └──┴──┘
${AnsiColor.BRIGHT_YELLOW}
                    .::::.
                  .::::::::.
                 :::::::::::
             ..:::::::::::'
           '::::::::::::'
             .::::::::::
        '::::::::::::::..
             ..::::::::::::.
           ``::::::::::::::::
            ::::``:::::::::'        .:::.
           ::::'   ':::::'       .::::::::.
         .::::'      ::::     .:::::::'::::.
        .:::'       :::::  .:::::::::' ':::::.
       .::'        :::::.:::::::::'      ':::::
      .::'        :::::::::::::::'         ::::.
  ...:::         ::::::::::::::'             ::::.
 ````':.          ':::::::::'                  ::::..
                    ':::::'                    ':'````..
${AnsiColor.DEFAULT}
                    .::::.
                  .::::::::.
                 :::::::::::
             ..:::::::::::'
           '::::::::::::'
             .::::::::::
        '::::::::::::::..
             ..::::::::::::.
           ``::::::::::::::::
            ::::``:::::::::'        .:::.
           ::::'   ':::::'       .::::::::.
         .::::'      ::::     .:::::::'::::.
        .:::'       :::::  .:::::::::' ':::::.
       .::'        :::::.:::::::::'      ':::::
      .::'        :::::::::::::::'         ::::.
  ...:::         ::::::::::::::'             ::::.
 ````':.          ':::::::::'                  ::::..
                    ':::::'                    ':'````..
spring-boot.version : ${spring-boot.version}

运行效果:

在这里插入图片描述

注意

  • 也可以在IDEA中配置Program arguments:--spring.profiles.active=development,port,ctx来配置
  • 对应的VM options:-Dspring.profiles.active=development,port,ctx
  • 可以在Program arguments(或者VM options)中配置:--server.port=8888,使用这两种方式设置配置信息的优先级是最高的。
  • Program arguments和VM options的多个配置使用空格隔开,例如:--spring.profiles.active=production,port,ctx --server.port=9999
  • 当然也可以通过Program arguments和VM options传入其他配置信息:
    • Program arguments:--name=lp --age=20
    • VM options:-Dname=lp -Dage=20
    • 使用@Value("name")@Value("age")就可以注入到对象的属性中使用。

参考

小码哥-李明杰: Java从0到架构师③进阶互联网架构师.


本文完,感谢您的关注支持!


  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:15:04  更:2022-04-24 09:16:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:02:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码