SpringBoot 的入门开发

目录

一、环境准备

二、构建spring项目

[1、方式一:使用Spring Initializr的web 页面创建项目:](#1、方式一:使用Spring Initializr的web 页面创建项目:)

2、方式二:使用IDEA直接创建项目

3、方式三:使用idea创建项目

[4、使用 IDEA 创建Maven项目并改造为springBoot项目](#4、使用 IDEA 创建Maven项目并改造为springBoot项目)

5、将项目打jar包

三、springboot核心配置

1、banner修改:

1、方式一:文本txt方式,

2、方式二

[2、Spring Boot配置文件分类](#2、Spring Boot配置文件分类)

1、yaml概述:(简洁,以数据为核心)

[2、yaml 基础语法](#2、yaml 基础语法)

3、yaml读取配置内容

[1. 逐个注入:@Value (不支持复杂数据类型](#1. 逐个注入:@Value (不支持复杂数据类型)

[2. 批量注入:1.@ConfigurationProperties 2.Environment类](#2. 批量注入:1.@ConfigurationProperties 2.Environment类)

[3. 对比](#3. 对比)

[4、 JSR303数据校验 (检查属性赋值是否符合规范)](#4、 JSR303数据校验 (检查属性赋值是否符合规范))

JSR303校验注解的使用步骤

1.添加依赖,导入spring-boot-starter-validation启动器

2.在实体类需要校验的成员字段(Field)上,添加校验注解。

[3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果](#3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果)

4、常用注解


一、环境准备

  • java Version :1.8
  • Maven:3.6以上
  • SpringBoot:2.X最新版

二、构建spring项目

1、方式一:使用Spring Initializr的web 页面创建项目:

  1. 打开 https://start.spring.io/

  2. 填写项目信息

  3. 点击"Generate Project"按钮生成项目;下载此项目

  4. 解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。

  5. 如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。

2、方式二:使用IDEA直接创建项目

1、创建一个新项目

2、选择SpringBoot,可以看到默认就是去官网的快速构建工具那里实现

3、填写项目信息

4、选择未初始化的组件(初学勾选web)

5、填写项目路径

6、等待项目构建成功

7、配置MAVEN信息和更换jdk版本

3、方式三:使用idea创建项目

(与方式二相同,路径不同:https://start.aliyun.com

4、使用 IDEA 创建Maven项目并改造为springBoot项目

  1. 程序的主启动类

  2. 一个 application.properties 配置文件

  3. 一个 测试类

  4. 一个 pom.xm

java 复制代码
//pom 文件spring boot主坐标(依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

5、将项目打jar包

1、点击package

2、可以通过cmd之既然运行jar包:Java -jar jar包名

三、springboot核心配置

1、banner修改:

1、方式一:文本txt方式,

  • 在resources 目录下新建一个banner.txt,
  • 图案可以到: https://www.bootschool.net/ascii 这个网站生成,然后拷贝到文件中即可,
  • 设置图片作为banner :在配置文件中添加

spring.banner.image.location=logo.png

2、方式二

  • 直接将图片移到resources目录下,改名为banner
  • 关闭其他banner设置
  • 直接启动项目

2、Spring Boot配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用 application.properties或者application.yml(application.yaml)进行配置

  • application.properties 语法结构 :key=value

server.port=8081

  • application.yml 语法结构 :key:空格 value (冒号后面必须要有空格)

server: port: 8081

1、yaml概述:(简洁,以数据为核心)

YAML全称是YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据序列化格式 , 并且容易被人类阅读,容易和脚本语言交互的 ,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。 YAML文件的扩展名可以使用.yml或者.yaml。

  • properties:

server.port=8080

server.address=127.0.0.1

  • xml:

<server>

<port>8080</port>

<address>127.0.01</address>

<server>

  • yml:

server: port: 8080

address: 127.0.0.1

2、yaml 基础语法

  • 1、大小写敏感
  • 2、数据值前必须要有空格,作为分隔符
  • 3、使用缩进表示层级关系
  • 4、缩进时不使用tab键,值允许使用空格()各个系统对应的Tab空格数可能不同,导致层次结构发生变化
  • 5、缩进的空格数目不重要,只要相同层级的元素左侧对其即可
  • 6、'#'表示注释,从这个字符一致到行尾,都会被解析器忽略
java 复制代码
#################yml语法数据类型######################
######基本数据类型与string##########
boolean: true
float: 3.14
int: 18
String: 张三

#########类型二:数组单列list set array##############
adress:
  - 北京
  - 上海
  - 南京
  - 成都
#行类写法:
adress1: [ 北京,上海,南京,成都 ]
########类型二 集合 多列#############
person:
  name: 张三
  age: 25
  sex: 男

#行内写法
person1: { name: 张三,age: 16,sex: 男 }
#########对象集合 集合【person】############
#1
people:
  - name: 张三
    age: 24
    sex: 男
  - name: 李四
    age: 25
    sex: 女
  #2
people2:
  - name: 张三
    age: 24
    sex: 男
  - name: 李四
    age: 25
    sex: 女
#行类写法
people1: [ { name: 张三,age: 24,sex: 男 },{ name: 李四,age: 25,sex: 女 } ]
pepole2:
  - { name: 张三,age: 24,sex: 男 }
  - { name: 李四,age: 25,sex: 女 }
#########YAML: 参数引用-特殊应用############
name: 张三
user:
  name: 李四
  father: ${name}

3、yaml读取配置内容

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值! 支持方式:

1. 逐个注入:@Value (不支持复杂数据类型
java 复制代码
//yaml配置
persons1:
  name: 张三
  age: 25
  happy: true
  birth: 2002/9/11
  maps: {k1: v1,k2: v2}
  lists: [1,2,3,4]
  dog:
    name: 旺财
    age: 3
java 复制代码
@Component
@ConfigurationProperties(prefix = "person1")  // 读取配置文件中的 persons 前缀的属性
//@PropertySource ("classpath:person1.properties") :加载指定的配置文件;
public class Persons {
    @Value("${person1.name}")
    private String name;
    @Value("${person1.age}"
    private Integer age;
    @Value("${person1.happy}")
    private Boolean happy;
    @Value("${person1.birth}")
    private Date birth;
//    @Value("${person1.maps}") 不支持复杂数据类型
    private Map<String, Object> maps;
//    @Value("${person1.lists}")
    private List<Object> lists;
//    @Value("${person1.dog}")
    private Dog dog;

    //有参无参构造、get、set方法、toString()方法 
}
2. 批量注入:1.@ConfigurationProperties 2.Environment类

编写一个复杂一点的实体类:Person 类

java 复制代码
@Component //注册bean到容器中
public class Person {
 private String name;
 private integer age;
 private boolean marry;
 private Date birth;
 private Map<String,Object> maps;
 private List<Object> lists;
 private Dog dog;

     //有参无参构造、get、set方法、toString()方法 
 }

编写yaml文件内容

java 复制代码
person1:
  name: wangls
  age: 18
  marry: true
  birth: 1990/10/19
  maps: {k1: v1,k2: v2}
  lists:- code- bodybuilding- music
  dog:
  name: summer
  age: 1

将数据注入到我们的类中

java 复制代码
/*
 @ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = "person" : 将配置文件中的person下面的所有属性一一对应
*/
 @Component //注册bean
 @ConfigurationProperties(prefix = "person1")
 public class Person {
 private String name;
 private Integer age;
 private Boolean happy;
 private Date birth;
 private Map<String,Object> maps;
 private List<Object> lists;
 private Dog dog;
 } 
3. 对比

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟 着的字母默认是大写的。这就是松散绑定。可以测试一下

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论

配置yml和配置properties都可以获取到值 , 强烈推荐 yml; 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value; 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接 @configurationProperties,不要犹豫!

4、 JSR303数据校验 (检查属性赋值是否符合规范)

对于web服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!大部分 情况下,请求参数分为如下两种形式: 1. POST 、 PUT 请求,使用 2. requestBody 传递参数; GET 请求,使用 requestParam/PathVariable 传递参数。

什么是 JSR303 标准 ?

JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community Process )提出

新增一个标准化技术规范的正式请求。

Java API规范( JSR303 )定义了 Bean 校验的标准 validation-api ,但没有提供实现。 hibernate validation 是对这个规范的实现,并增加了校验注解如 Validation 是对 来,我们以 @Email 、 @Length 等。 Spring hibernate validation 的二次封装,用于支持 spring mvc参数自动校验。接下 spring-boot 项目为例,介绍 Spring Validation 的使用

JSR303校验注解的使用步骤
1.添加依赖,导入spring-boot-starter-validation启动器
java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
 </dependency>
2.在实体类需要校验的成员字段(Field)上,添加校验注解。
java 复制代码
@Component  //注册bean到容器中
//@ConfigurationProperties(prefix = "dog")
@Validated  //开启jsr303校验
 public class Dog {
    @NotNull(message = "狗名不能为空")
    private String name;
    @NotNull(message = "狗命不能为空")
    @Max(value = 15,message = "狗命拿来")
    private Integer age;
    @Min(value = -1,message = "狗还是个细胞")
    private Integer length;
    @Email(message = "邮箱必须合法")
    private String email;
 }
3.在Controller控制器的校验参数前,使用@Valid注解开启校验,使用BindingResult 绑定校验结果
java 复制代码
@RequestMapping("/validationDemo")
    public String validationDemo(@Valid Dog dog, BindingResult result){
        //得到所有错误信息计数
        int errorCount = result.getErrorCount();
        //错误数大于0
        if (errorCount>0){
            //得到所有错误
            List<FieldError> fieldErrors = result.getFieldErrors();
            //迭代错误
            for (FieldError fieldError:fieldErrors) {
                //错误信息
                System.out.println( "属性:{},"+fieldError.getField()+"传来的值是:
{}"+fieldError.getRejectedValue()+",出错的提示消息:
{}"+fieldError.getDefaultMessage());
            }
            return "数据不合法";
        }else{
            return "数据合法";
        }
    }
4、常用注解
java 复制代码
 // 被注解的元素必须为null
  @Null(message = "必须为null") 
  // 被注解的元素必须不为null
  @NotNull(message = "必须不为null")
// 校验注解的元素值不为空(不为null、去除首位空格后长度为0),类型为String
 @NotBlank(message = "必须不为空") 
// 校验注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0),类型为CharSequence、
Collection、Map、Array
 @NotEmpty(message = "必须不为null且不为空") 
// 被注解的元素必须为true,并且类型为boolean
 @AssertTrue(message = "必须为true") 
// 被注解的元素必须为false,并且类型为boolean
 @AssertFalse(message = "必须为false")

 // 被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double
 @Min(value = 18, message = "必须大于等于18")
 // 被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double
 @Max(value = 18, message = "必须小于等于18") 
// 校验注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal
 @DecimalMin(value = "150", message = "必须大于等于150") 
// 校验注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal
 @DecimalMax(value = "300", message = "必须大于等于300")
 // 校验注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,
byte,short,int,long。
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80") 
// 被注解的元素必须为过去的一个时间,并且类型为java.util.Date
 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时
间")
 // 被注解的元素必须为未来的一个时间,并且类型为java.util.Date
 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时
间")

长度校验
// 被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map
 @Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")
 // 校验注解的元素值长度在min和max区间内 ,并且类型为String
 @Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")

// 校验注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位")
 // 被注解的元素必须符合指定的正则表达式,并且类型为String
 @Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11")
 // 校验注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式,类型为String
 @Email(message = "必须是邮箱")
相关推荐
周杰伦_Jay3 小时前
【Spring Boot从入门到精通】原理、实战与最佳实践
java·spring boot·后端
观望过往4 小时前
【Java数据结构】队列详解与经典 OJ 题目实战
java·数据结构
Penge6664 小时前
Hadoop-大数据技术
后端
天地人-神君4 小时前
将.idea取消git托管
java·git·intellij-idea
运维行者4 小时前
知乎崩了?立即把网站监控起来!
前端·javascript·后端
譕痕4 小时前
Idea 启动报 未找到有效的 Maven 安装问题
java·maven·intellij-idea
武昌库里写JAVA4 小时前
C语言 函数指针和指针函数区别 - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
Mr YiRan5 小时前
多线程性能优化基础
android·java·开发语言·性能优化
CHEN5_025 小时前
【leetcode100】和为k的子数组(两种解法)
java·数据结构·算法