使用Spring Initializer快速创建Spring Boot项目与配置文件

一、使用Spring Initializer快速创建Spring Boot项目

IDEA

1、创建项目时选择 Spring Initializr

使用Spring Initializer快速创建Spring Boot项目与配置文件_第1张图片

2、完善项目信息

使用Spring Initializer快速创建Spring Boot项目与配置文件_第2张图片

! 出现 Artifact contains illegal characters 是因为Artifact中使用了大写,只能是全小写,单词之间用-分隔

3、选择需要的 starter使用Spring Initializer快速创建Spring Boot项目与配置文件_第3张图片使用Spring Initializer快速创建Spring Boot项目与配置文件_第4张图片

4、创建完成后 不要的文件可以删除使用Spring Initializer快速创建Spring Boot项目与配置文件_第5张图片

使用Spring Initializer快速创建Spring Boot项目与配置文件_第6张图片

Eclipse

 1、需要安装插件,或者使用STS版本

2、创建项目时选择Spring Starter Project使用Spring Initializer快速创建Spring Boot项目与配置文件_第7张图片

使用Spring Initializer快速创建Spring Boot项目与配置文件_第8张图片

3、完善信息使用Spring Initializer快速创建Spring Boot项目与配置文件_第9张图片

使用Spring Initializer快速创建Spring Boot项目与配置文件_第10张图片

4、选择需要的starter

使用Spring Initializer快速创建Spring Boot项目与配置文件_第11张图片

默认生成的Spring Boot项目

  • 主程序已经生成好了,我们只需要完成我们自己的逻辑
  • resources文件夹中目录结构
    • static:保存所有的静态资源; js、css、images;
    • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
    • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

二、配置文件

SpringBoot 使用了一个全局的配置文件,配置文件名 application 是固定的

  •    application.properties
  • application.yml
  • application.yaml

配置文件的作用:修改SpringBoot 自动配置的默认值;SpringBoot 在底层都给我们自动配置好。

YAML

YAML(YAML Ain't Markup Language)

​ YAML A Markup Language:是一个标记语言

​ YAML isn't Markup Language:不是一个标记语言;

标记语言:

​ 以前的配置文件;大多都使用的是 xxxx.xml文件;

​ YAML:以数据为中心,比json、xml等更适合做配置文件;

YAML语法:

空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

次等级的前面是空格,不能使用制表符(tab)

冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着你  

字面量:普通的值(数字,字符串,布尔)

k: v

字符串默认不用加上单引号或者双引号;

"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

   eg: name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

eg: name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值):

k: v在下一行来写对象的属性和值的关系;注意缩进

1、

  1. ​​​​​​​person:
      name: 张三
      gender: 男
      age: 22

     

  2. 行内写法

    person: {name: 张三,gender: 男,age: 22}

 

数组(List、Set)

 1、

​​​​​​​fruits: 
  - 苹果
  - 桃子
  - 香蕉
  1. 行内写法

    fruits: [苹果,桃子,香蕉]

 配置文件值注入

1、JavaBean

public class Pet {

    private String name;
    private Integer 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;
    }

    @Override
    public String toString() {
        return "Pets{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}

/**
     * @Author cloudlandboy
     * @Date 2019/11/13 下午8:06
     * @Since 1.0.0
     * 将配置文件中配置的每一个属性的值,映射到这个组件中
     *
     * ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 */

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Character gender;
    private Integer age;
    private boolean boss;
    private Date birth;
    private Map maps;
    private List lists;
    private Pet pet;

    public String getName() {
        return name;
    }

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

    public Character getGender() {
        return gender;
    }

    public void setGender(Character gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

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

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map getMaps() {
        return maps;
    }

    public void setMaps(Map maps) {
        this.maps = maps;
    }

    public List getLists() {
        return lists;
    }

    public void setLists(List lists) {
        this.lists = lists;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", pet=" + pet +
                '}';
    }
} 
  

提示:提示

需要导入配置文件处理器,以后编写配置就有提示了

         
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        

2、 配置文件

person:
  name: 张三
  gender: 男
  age: 36
  boss: true
  birth: 1982/10/1
  maps: {k1: v1,k2: v2}
  lists:
    - apple
    - peach
    - banana
  pet:
    name: 小狗
    age: 12

3、测试

package cn.clboy.helloworldquickstart;

import cn.clboy.helloworldquickstart.model.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class HelloworldquickstartApplicationTests {

    @Autowired
    private Person person;

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

}

properties

上面yaml对应的properties配置文件写法、

person.name=李四
person.age=34
person.birth=1986/09/12
person.boss=true
person.gender=女
person.lists=cat,dog,pig
person.maps.k1=v1
person.maps.k2=v2
person.pet.name="小黑"
person.pet.age=10

!测试,发现中文会乱码,而且char类型还会抛出Failed to bind properties under 'person.gender' to java.lang.Character异常

中文乱码解决方法:

在设置中找到File Encodings,将配置文件字符集改为UTF-8,并勾选:

Transparent native-to-ascii conversion使用Spring Initializer快速创建Spring Boot项目与配置文件_第12张图片

!yaml和properties配置文件同时存在,properties配置文件的内容会覆盖yaml配置文件的内容

配置文件值注入两种方式对比

配置文件值注入有两种方式,一个是Spring Boot的@ConfigurationProperties注解,另一个是spring原先的@value注解

  @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

松散绑定:例如Person中有lastName属性,在配置文件中可以写成 lastNamelastnamelast-namelast_name等等

SpEL

## properties配置文件
persion.age=#{2019-1986+1}

# Person类
#--------------------使用@ConfigurationProperties注解,会抛出异常--------------------
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private Integer age;


#--------------------使用@value注解 OK--------------------
@Component
public class Person {
    @Value("${person.age}")
    private Integer age;

https://note.clboy.cn/#/backend/springboot/properties?id=%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e5%80%bc%e6%b3%a8%e5%85%a5%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e5%af%b9%e6%af%94

 

https://niceseason.github.io/2020/04/18/springboot/

你可能感兴趣的:(Java,java)