一、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语法基础
- 大小写敏感
- 数据值前边必须加空格,作为分隔符
- 使用缩进表示层级关系
- 缩进的空额不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。
- 缩进的空格数目不重要,只要相同层级的元素左侧对其即可
- “#”表示注释,从这个字符一直到行尾,都会被解析器忽略。
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: [email protected] 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}_真帅
小结
- 配置文件类型
- properties:和以前一样
- yml/yaml:注意空格
2.yaml:简介,以数据为核心
- 基本语法
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用空格缩进表示层级关系,相同缩进表示同一级
- 数据格式
- 对象
- 数组:使用“-”表示数组的每个元素
- 纯量
- 参数引用
${key}
2.读取配置内容
支持方式:
- 逐个注入:@Value
- 批量注入:
- @ConfigurationProperties
- 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: [email protected] 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 传递参数。
数据校验的使用步骤:
- 导坐标
<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
标签:return,SpringBoot,age,String,import,public,name From: https://blog.csdn.net/fada_da_da/article/details/142367270
- application-dev.properties/yml 开发环境
- application-test.properties/yml 测试环境
- application-pro.properties/yml 生产环境
profile激活方式:
- 配置文件:
spring: profiles: default: test