文章目录

  • 1. Spring Initializr 部署框架
  • 1.1 选择Spring Initializr
  • 1.2 选择版本并创建模板
  • 1.3 测试并启动
  • 2. 全局配置
  • 2.1 yml文件
  • 2.2 逐个读取配置文件数据
  • 2.3 读取全部配置文件
  • 2.4 将配置文件信息写入对象
  • 2.4.1 松散绑定
  • 2.4.2 注明单位
  • 2.4.3 数据校验
  • 3. 常用注解
  • 3.1 新建实例类
  • 3.2 新建配置类
  • 3.3 测试


1. Spring Initializr 部署框架

1.1 选择Spring Initializr

springboot 判断list springboot yml list_学习

注意,如果上述 Server URL 的地址为官网 start.spring.io 时速度很慢,可以选择将其更换为 start.aliyun.com

1.2 选择版本并创建模板

springboot 判断list springboot yml list_springboot 判断list_02

1.3 测试并启动

创建一个 controller 包来编写控制器,控制器类文件 HelloController.java 中的内容如下:

@RestController
public class HelloController {
    @RequestMapping("/hello2")
    public String hello(String name){
        return "hello springboot2!!!";
    }
}

注意,创建的 controller 包应该与启动类文件同级,否则 springboot 扫描不到相应的文件。

SpringBoot中内置有 Tomcat,所以不必另外配置 Tomcat服务,直接访问网址 http://localhost:8080/hello2 就能看到打印出的 hello springboot2!!!

@RestController 注解相当于 @controller@ResponseBody 的结合.
@Controller 将当前修饰的类注入SpringBoot Ioc容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。
@ResponseBody 它的作用简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端。

2. 全局配置

SpringBoot中有一个引导类,即初始化的文件,其中的引导类的作用是

  • 初始化SpringBoot容器,扫描引导类所在的包能够加载Bean
  • 引导类是工程的入口,运行main方法就能启动项目

使用骨架创建了SpringBoot项目后,在 resource 目录下就有一个名为 application.properties 的配置文件,该配置文件可以加载SpringBoot的一些配置信息。

2.1 yml文件

默认得到的配置文件是 properties 文件,但是推荐使用 yml 文件,即将文件名改为 application.yml

  • 语言格式
    yml语言每一级采用两个空格来区分,注意,冒号后面有一个空格,如下:
server:
  port: 82

表示server下的port设置为82端口。

  • 字面量
    key: value:字⾯直接来写;
    "":双引号;会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思;
    '':单引号;不会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
    "1 \n 2"‘1 \n 2’ 表达式不同的,前者会被转义为换行符,后者原样输出。
  • 对象
    key: value:在下⼀⾏来写对象的属性和值的关系,需要进⾏缩进,如下:
friends:
  lastName: zhangsan
  age: 20

⾏内写法:

friends: {lastName: zhangsan,age: 18}
  • 数组
    使⽤- 值表示数组中的⼀个元素,如下:
pets:
  - cat
  - dog
  - pig

数组⾏内写法:

pets: [cat,dog,pig]
  • 引用
    当需要引用前面定义的变量时,跟下面的读取文件一样,使用 ${} 即可,如下:
server:
  port: 82
s: 端口是${server.port}
  • 数字
    yaml支持二进制,十进制、八进制、十六进制的表示,所以,当你要输入数字的时候 就要小心了,比如,你将密码设置如下
password: 0127

即是你使用的是字符串来存储数据,你读出的时候也是 "87" 这个值,为什么呢?因为以 0 开头的数据是默认为八进制的,所以读取的时候按照的是八进制来读取,这个时候如果不希望读到八进制,就需要加个双引号,如下:

password: "0127"

2.2 逐个读取配置文件数据

springboot 判断list springboot yml list_java_03

2.3 读取全部配置文件

读取单⼀数据可以解决读取数据的问题,但是如果定义的数据量过⼤,这么⼀个⼀个书写肯定会累死⼈的,SpringBoot提供了⼀个对象,能够把所有的数据都封装到这⼀个对象中,这个对象叫做Environment,使⽤⾃动装配注解可以将所有的yaml数据封装到这个对象中。

配置文件中的内容如下所示:

person:
  name: zhangsan
  age: 20
#数组
hobbies:
  - basketball
  - volleyball

控制器中的内容如下所示:

@RestController
public class HelloController {

    @Autowired
    private Environment environment;

    @RequestMapping("/hello2")
    public String hello(){
        System.out.println(environment.getProperty("person.name"));
        System.out.println(environment.getProperty("hobbies[0]"));
        return "hello Spring Boot";
    }
}

采用这种方法也能获得配置文件中的数据。

2.4 将配置文件信息写入对象

比如在 application.yml 文件中有以下的数据:

person:
  name: marui
  age: 18

那么可以使用注解 @ConfigurationProperties() 来将其装填到实体类中去,装填时需要指定一个参数 prefix ,这个参数表明引用的配置文件数据的前缀名,如下所示:

@Component
@ConfigurationProperties(prefix = "person")
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
    private String name;
    private int age;
}

2.4.1 松散绑定

@ConfigurationProperties(prefix = "person")prefix 的参数只能使用小写字母、数字、下划线的形式,但是,对应的 yml 文件中的属性名是支持松散绑定的,例如 yml 中的 person.name 属性写为 Name,NAME,name,na-m-e,n_a-m_e 都是可以读到相应的对象中去的,但注意,这仅在 @ConfigurationProperties 对应的 yml 文件配置中可以支持松散绑定,其他的如 @Value 等都不支持。

2.4.2 注明单位

给配置文件中的内容追加两个属性,一个是有效时间, 一个是占用大小,这两个属性如下:

person:
  name: marui
  age: 18
  setTimeOut: 30
  datasize: 5

现在就产生了一个很明显的问题,这两个属性的单位是什么,想要注明两个变量的单位,我们可以使用注解来对其单位进行解释。

@Component
@ConfigurationProperties(prefix = "person")
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
    private String name;
    private int age;
    @DurationUnit(ChronoUnit.MINUTES) //表示单位是分
    private Duration setTimeOut;
    @DataSizeUnit(DataUnit.MEGABYTES) //表示单位是MB
    private DataSize datasize;
}

有时会莫名其妙报错,加个下面的依赖就行

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

2.4.3 数据校验

安装下面的依赖进行数据校验

<dependency>
   <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

而且需要在校验的类前面加上类注解 @Validated
依然用上面的实例进行示范,比如给年龄增加最大值与最小值:

@Component
@ConfigurationProperties(prefix = "person")
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Validated
public class Person {
    private String name;
    @Max(value = 99, message = "最大年龄不能超过99")
    @Min(value = 0, message = "最小年龄不能小于0")
    private int age;
    @DurationUnit(ChronoUnit.MINUTES) //表示单位是分
    private Duration setTimeOut;
    @DataSizeUnit(DataUnit.MEGABYTES) //表示单位是MB
    private DataSize datasize;
}

若是读取的信息不符合条件,会进行报错,提示信息未自己所写的信息。

常用的校验信息如下:

校验注解

含义

@Null

被注释的元素必须为 null

@NotNull

被注释的元素必须不为 null

@AssertTrue

被注释的元素必须为 true

@AssertFalse

被注释的元素必须为 false

@Min(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max=, min=)

被注释的元素的大小必须在指定的范围内

@Past

被注释的元素必须是一个过去的日期

@Future

被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=)

被注释的元素必须符合指定的正则表达式

@Email

被注释的元素必须是电子邮箱地址

@Length(min=,max=)

被注释的字符串的大小必须在指定的范围内

@NotEmpty

被注释的字符串的必须非空

3. 常用注解

  • @Configuration:声明⼀个类作为配置类
  • @Bean:声明在⽅法上,将⽅法的返回值加⼊Bean容器
  • @Value:属性注⼊
  • @ConfigurationProperties(prefix = "jdbc"):批量属性注⼊,在类前进行注解,prefix 参数表示其是配置文件的哪个对象。

为了展示以上注解的使用与功能,现进行如下操作。

3.1 新建实例类

首先导入 lombok 依赖。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>

beans 包下新建一个 Book类来进行实验。

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Book {
    private String book_name;
    private int book_id;
    private String book_author;
}

再新建一个 Car 类来进行实验。

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Car {
    private String car_name;
    private int car_id;
    private String car_owner;
}

3.2 新建配置类

新建一个配置类 Test1.java ,在里面写上内容如下:

@Configuration
public class Test1 {

    @Bean(name = "book")
    public Book book_bean(){
        Book book = new Book("福尔摩斯", 11, "柯南道尔");
        return book;
    }

    @Bean(name = "car")
    public Car car_bean(){
        Car car = new Car("宝马", 10086, "华生");
        return car;
    }
}

上述内容中的 @Configuration 就相当于是Spring中的xml配置文件,其中的每个 @Bean 注解就相当于是在 xml 配置文件中配置的一个 bean

3.3 测试

HelloController.java 文件中进行如下测试:

@RestController
public class HelloController {

    @RequestMapping("/hello2")
    public String hello(){
        ApplicationContext context = new AnnotationConfigApplicationContext(Test1.class);
        Car car = (Car)context.getBean("car");
        Book book = (Book) context.getBean("book");
        System.out.println(car);
        System.out.println(book);
        return "hello Spring Boot";
    }
}

其能够将创建的实例输出,代表我们实验成功。