SpringBoot

一、Spring项目的入门开发
1.快速构建SpringBoot项目  

项目创建方式一:使用Spring Initializr 的 Web页面创建项目

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

2. 填写项目信息

3. 点击”Generate Project“按钮生成项目;

下载此项目

4. 解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。 5. 如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。

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

1. 创建一个新项目

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

3. 填写项目信息

4. 选择初始化的组件(初学勾选 Web 即可)

5. 填写项目路径

6. 等待项目构建成功  

项目创建方式三:使用 IDEA 直接创建项目

1. 与方式2相同,但是参考路径为:https://start.aliyun.com

项目创建方式四:使用 IDEA 创建Maven项目并改造为springBoot 项目结构分析: 1. 程序的主启动类

2. 一个 application.properties 配置文件

3. 一个 测试类

4. 一个 pom.xml

 2.项目打Jar包

 使用指令java -jar 项目名

3.banner修改

1.项目下resources目录下新建一个banner.txt即可

2.图案可以到:https://www.bootschool.net/ascii这个网页生成,然后拷贝到文件中;

3.设置图片作为banner

spring.banner.image.location=logo.png

二、Spring Boot配置文件分类

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

  • application.properties

             语法结构:key=value

eg:server.port=8081

  • application .yml

      语法结构:key: 空格value (冒号后面必须有空格)

eg:server: 

             port: 8081

小结:

  • SpringBoot提供了2中配置文件类型:properties和yml/yaml
  • 默认配置文件名称:application
  • 在同一级目录下如果三类文件共存,优先级为:properties>yml>yaml 
 1.ymal语法基础
  1. 大小写敏感
  2. 数据值前边必须加空格,作为分隔符
  3. 使用缩进表示层级关系
  4. 缩进的空额不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。
  5. 缩进的空格数目不重要,只要相同层级的元素左侧对其即可
  6. “#”表示注释,从这个字符一直到行尾,都会被解析器忽略。
1.1yaml数据格式
  • 字面量:普通的值[数字,布尔值,字符串]

boolean:TRUE             #TRUE、true、True、FALSE、false、False均可

float:3.14                    #6.8523015e+5 #支持科学计数法

int:123                         #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制

String                           #字符串可以直接书写

  • 数组:单列(array、List、set)

address:
  - 北京
  - 西安
  - 上海
#  数组的行内写法
commpany: [阿里巴巴,华为,腾讯,字节跳动]
  •  双列:map
person:
 name: 小蒋
 age: 18
行内写法
person2: {name: 小陈,sex: 女}
对象数据格式1
user1:
  person1:
    name: 小郭
     age: 18
person:
  email: 2018039819@qq.com
  name: 小郭
  age: 18
  marry: false
  birth: 2001/10/28
  maps: {first: 吃饭,second: 睡觉, third: 玩手机}
  lists: [豆腐泡,汉中麻辣鱼]

对象数组格式二

users:

- name: Tom

   age: 4

- name: Jerry

    age: 5

对象数组缩略格式

users2: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ]

1.2YAML:参数引用

name: wangzhuo

person:

name: xuelaoshi

pet: ${name}                                               # 引用上边定义的name值

name: xuls${random.uuid}                          # 配置文件占位符,随机uuid

name: ${person.name}_真帅 

小结

  1. 配置文件类型
  • properties:和以前一样
  • yml/yaml:注意空格

2.yaml:简介,以数据为核心

  • 基本语法
  1. 大小写敏感
  2. 数据值前边必须有空格,作为分隔符
  3. 使用空格缩进表示层级关系,相同缩进表示同一级
  • 数据格式
  1. 对象
  2. 数组:使用“-”表示数组的每个元素
  3. 纯量
  • 参数引用

     ${key}

 2.读取配置内容

支持方式:

  • 逐个注入:@Value
  • 批量注入:
  1. @ConfigurationProperties
  2. Environment类
    package com.ly.springboot_init_01.pojo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    @Component
    @PropertySource(value = "classpath:dog.yml")
    public class Dog {
       @Value("${name}")
        private String name;
       @Value("${age}")
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    主配置文件

    dog:
      name: kimi
      age: 2

 

测试批量注入

person实体类

批量注入主要用到以下两个注解:

@Component
@ConfigurationProperties(prefix = "实体类名")

package com.ly.springboot_init_01.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "person")
/*
@ConfigurationProperties作用:
直接在测试类中装配开发模式类辅助获取key对应value数据,将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应*/
public class Person {
    private String  email;
    private String name;
    private int age;
    private  boolean marry;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public boolean isMarry() {
        return marry;
    }

    public void setMarry(boolean marry) {
        this.marry = marry;
    }

    public Date getBirth() {
        return birth;
    }

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

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

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

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "email='" + email + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", marry=" + marry +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

 主配置类

person:
  email: 2018039819@qq.com
  name: 小郭
  age: 18
  marry: false
  birth: 2001/10/28
  maps: {first: 吃饭,second: 睡觉, third: 玩手机}
  lists: [豆腐泡,汉中麻辣鱼]
  dog:
    name: kimi
    age: 2
3.JSR303数据校验

对于 web 服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!大部分 情况下,请求参数分为如下两种形式:

1. POST 、 PUT 请求,使用 requestBody 传递参数;

2. GET 请求,使用 requestParam/PathVariable 传递参数。

 数据校验的使用步骤:

  1.  导坐标
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

      2.写注解

package com.ly.springboot_init_01.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Validated
public class Person {
    @Email(message = "邮箱必须合法")
    private String  email;
    @NotNull
    private String name;
    @Max(value = 125,message = "请输入合理范围")
    private int age;
    private  boolean marry;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public boolean isMarry() {
        return marry;
    }

    public void setMarry(boolean marry) {
        this.marry = marry;
    }

    public Date getBirth() {
        return birth;
    }

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

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

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

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "email='" + email + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", marry=" + marry +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}
4.Controller统一异常处理
  • @ControllerAdvice:统一为Controller进行"增强"
  • @ExceptionHandler : 异常处理
package com.ly.springboot_init_01.util;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class BindExceptionUtilAdvice {
    //验证参数未使用@RequestBody注解
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public String handlerBindException(BindException ex){
    return "全局异常处理器成功";
    }
}
 5.多环境切换profile
  • application-dev.properties/yml 开发环境
  • application-test.properties/yml 测试环境
  • application-pro.properties/yml 生产环境

profile激活方式:

  •        配置文件:
spring:
  profiles:
    default: test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值