SpringBoot框架学习(一)——部署、yml配置与类的创建

  • Post author:
  • Post category:其他




1. Spring Initializr 部署框架



1.1 选择Spring Initializr

在这里插入图片描述

注意,如果上述

Server URL

的地址为官网

start.spring.io

时速度很慢,可以选择将其更换为

start.aliyun.com



1.2 选择版本并创建模板

在这里插入图片描述



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 逐个读取配置文件数据

在这里插入图片描述



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

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



版权声明:本文为ifhuke原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。