青岛做网站的公司排名,爱站网注册人查询,石家庄鹿泉网站建设,怎样开发游戏目录
一、Spring Boot概要
1. SpringBoot优点
2. SpringBoot缺点
二、Spring Boot入门开发
1. 第一个SpringBoot项目
项目创建方式一#xff1a;使用 IDEA 直接创建项目
项目创建方式二#xff1a;使用Spring Initializr 的 Web页面创建项目 #xff08;了解#…目录
一、Spring Boot概要
1. SpringBoot优点
2. SpringBoot缺点
二、Spring Boot入门开发
1. 第一个SpringBoot项目
项目创建方式一使用 IDEA 直接创建项目
项目创建方式二使用Spring Initializr 的 Web页面创建项目 了解
项目创建方式三使用 IDEA 直接创建项目了解
项目创建方式四使用 IDEA 创建Maven项目并改造为springBoot了解
2. 项目打jar包
3. banner修改
4. 项目列表显示优化
三、Spring Boot 核心配置
1. Spring Boot配置文件分类
2. YAML概述
3. YAML基础语法
语法要求
YAML数据格式
字面量普通的值 [ 数字布尔值字符串 ]
数组一组按次序排列的值 List、set
对象、Map键值对
YAML参数引用
YAML小结
4. 读取配置内容
逐个注入演示
批量注入方式1
批量注入方式2了解
对比小结
5. JSR303数据校验
JSR303校验注解的使用步骤
练习-处理用户请求并Controller 层做参数校验
JSR303校验注解的分类
Controller统一异常处理
6. 多环境切换profile 一、Spring Boot概要 随着动态语言的流行Ruby、Scala、Node.js, Java的开发显得格外的笨重繁多的配置、低 下的开发效率、复杂的部署流程以及第三方技术整合难度大。 在上述环境下Spring Boot由此诞生它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯 优于配置” 项目中存在大量的配置而 Spring Boot 内置一个习惯性的配置让你无须手动进行配 置的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行运行jar内嵌 Servlet 容器、准生产强力的基于 Spring 框架的项目使用 Spring Boot你可以不用或者只需要很少 的 Spring 配置。提供了 J2EE 开发的一站式解决方案。 2014 年 4 月Spring Boot 1.0.0 发布。Spring的顶级项目之一( https://spring.io)。 1. SpringBoot优点 Create stand-alone Spring applications创建独立Spring应用Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)内嵌web服务器Provide opinionated starter dependencies to simplify your build configuration 自动starter依赖简化构建配置 起步依赖 起步依赖本质上是一个Maven项目对象模型Project Object ModelPOM 定义了对其他库的传递依赖 这些东西加在一起即支持某项功能。 简单的说起步依赖就是 将具备某种功能的坐标打包到一起并提供一些默认的功能Automatically configure Spring and 3rd party libraries whenever possible自动配置Spring以及第三方功能Provide production-ready features such as metrics, health checks, and externalized configuration提供生产级别的监控、健康检查及外部化配置Absolutely no code generation and no requirement for XML configuration无代码生成、无需编写XML SpringBoot是整合Spring技术栈的一站式框架 SpringBoot是简化Spring技术栈的快速开发脚手架 Spring Boot 并不是对 Spring 功能上的增强而是提供了一种快速使用 Spring 的方式 2. SpringBoot缺点 人称版本帝迭代快需要时刻关注变化封装太深内部原理复杂不容易精通 二、Spring Boot入门开发 技术点要求 熟练 Spring 框架的使用 熟练 Maven 依赖管理与项目构建熟练使用 Eclipse 或 IDEA 环境准备 java version 1.8.0_181Maven-3.6.1SpringBoot 2.x 最新版 1. 第一个SpringBoot项目 项目创建方式一使用 IDEA 直接创建项目 1. 创建一个新项目2. 选择spring initalizr 可以看到默认就是去官网的快速构建工具那里实现3. 填写项目信息 项目名字不能大写 同时要选择maven 4. 选择初始化的组件这里勾选 Web 即可 5. 填写项目路径6. 等待项目构建成功 然后一直下一步 项目结构 配置pom.xml 如果进度条一直 在 关了重新开 然后导 !-- 父pom文件 --parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.13/versionrelativePath/ !-- lookup parent from repository --/parent!-- 项目信息 --groupIdcom.zkt/groupIdartifactIdspringboot_init_01/artifactIdversion0.0.1-SNAPSHOT/versionnamespringboot_init_01/namedescriptionDemo project for Spring Boot/description!-- 删除 --!-- url/ --!-- licenses --!-- license/ --!-- /licenses --!-- developers --!-- developer/ --!-- /developers --!-- scm --!-- connection/ --!-- developerConnection/ --!-- tag/ --!-- url/ --!-- /scm --!-- 版本锁定 --propertiesjava.version8/java.version/properties!-- 坐标 --dependencies!-- web启动器坐标springspringMVC --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- junit --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build 实现处理请求案例 1、在主程序的同级目录下新建一个controller包一定要在同级目录下否则识别不到2、在包中新建一个HelloController类3、编写完毕后从主程序启动项目浏览器发起请求看页面返回控制台输出了 Tomcat 访问的端口号 controller Controller
public class UserController {RequestMapping(path /handleRequest)//此注解处理用户请求ResponseBody//将修饰方法的返回值以json形式返回给方法的请求者public String handleRequest(){System.out.println(springBoot成功处理请求~);return helloWorld;}
} 运行结果 和Spirng程序相比SpringBoot程序在开发的过程中各个层面均具有优势 类配置文件 Spring SpringBoot pom文件中的坐标 手工添加 勾选添加 web3.0配置类 手工制作 无 Spring/SpringMVC配置类 手工制作 无 控制器 手工制作 手工制作 总结 开发SpringBoot程序可以根据向导进行联网快速制作SpringBoot程序需要基于JDK8以上版本进行制作SpringBoot程序中需要使用何种功能通过勾选选择技术也可以手工添加对应的要使用的技术运行SpringBoot程序通过运行Application程序入口进行 项目创建方式二使用Spring Initializr 的 Web页面创建项目 了解 开发SpringBoot程序可以不基于任意的IDE工具进行其实在SpringBoot的官网里面就可以直接创建SpringBoot程序 SpringBoot官网和Spring的官网是在一起的都是 spring.io 。你可以通过项目一级一级的找到SpringBoot技术的介绍页然后在页面中间部位找到如下内容 1. 打开 https://start.spring.io/2. 填写项目信息3. 点击”Generate Project“按钮生成项目下载此项目4. 解压项目包并用IDEA以Maven项目导入一路下一步即可直到项目导入完毕。5. 如果是第一次使用可能速度会比较慢包比较多、需要耐心等待一切就绪。 步骤①点击Spring Initializr后进入到创建SpringBoot程序的界面上下面是输入信息的过程和前面的一样只是界面变了而已根据自己的要求在左侧选择对应信息和输入对应的信息即可 步骤②右侧的ADD DEPENDENCIES用于选择使用何种技术和之前勾选的Spring WEB是在做同一件事仅仅是界面不同而已点击后打开网页版的技术选择界面 步骤③所有信息设置完毕后点击下面左侧按钮生成一个文件包 步骤④保存后得到一个压缩文件这个文件打开后就是创建的SpringBoot工程文件夹了 步骤⑤解压缩此文件后得到工程目录在Idea中导入即可使用和之前创建的东西完全一样。下面就可以自己创建一个Controller测试一下是否能用了。 总结 打开SpringBoot官网选择Quickstart Your Project创建工程并保存项目解压项目通过IDE导入项目 项目创建方式三使用 IDEA 直接创建项目了解 1. 与方式1相同但是参考路径为 https://start.aliyun.com 项目创建方式四使用 IDEA 创建Maven项目并改造为springBoot了解 项目结构分析 1. 程序的主启动类2. 一个 application.properties 配置文件3. 一个 测试类4. 一个 pom.xml 2. 项目打jar包 jar 包 双击 打包成功 项目文件夹下的traget 就可以找到 运行 在当面目录 进入cmd 输入以下命令即可 java -jar springboot_init_01-0.0.1-SNAPSHOT.jar 3. banner修改 1. 项目下的 resources 目录下新建一个banner.txt 即可。2. 图案可以到 https://www.bootschool.net/ascii 这个网站生成然后拷贝到文件中即可3. 设置图片作为banner spring.banner.image.locationlogo.png 4. 项目列表显示优化 三、Spring Boot 核心配置
1. Spring Boot配置文件分类 SpringBoot是基于约定的所以很多配置都有默认值但如果想使用自己的配置替换默认配置的话就可以使用 application.properties或者application.ymlapplication.yaml进行配置 application.properties 语法结构 keyvalue server.port8081 application.yml 语法结构 key空格 value 冒号后面必须要有空格 server:port: 8081 小结 SpringBoot提供了2种配置文件类型properteis和yml/yaml默认配置文件名称application在同一级目录入如果三类文件共存优先级为properties yml yaml 2. YAML概述 YAML全称是 YAML Aint Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式 并且容易被人类阅读容易和脚本语言交互的可以被支持YAML库的不同的编程语言程序导入 比 如C/C, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的比传统的xml方式更加简 洁。 YAML文件的扩展名可以使用.yml或者.yaml。 对比 properties: server.port8080
server.address127.0.0.1 xml: server
port8080/port
address127.0.0.1/address
/server yml: server: port: 8080 address: 127.0.0.1 简洁以数据为核心 3. YAML基础语法 语法要求 1. 大小写敏感 2. 数据值前边必须有空格作为分隔符 3. 使用缩进表示层级关系 4. 缩进时不允许使用Tab键只允许使用空格各个系统 Tab对应的 空格数目可能不同导致层次混 乱。5. 缩进的空格数目不重要只要相同层级的元素左侧对齐即可 6. #表示注释从这个字符一直到行尾都会被解析器忽略。 #语法结构 key空格 value 冒号后面必须要有空格
server:port: 8082servlet:context-path: /demo01 YAML数据格式 字面量普通的值 [ 数字布尔值字符串 ] ###########################语法################################
# 1. 大小写敏感
# 2. 数据值前边必须有空格作为分隔符
# 3. 使用缩进表示层级关系
# 4. 缩进时不允许使用Tab键只允许使用空格各个系统 Tab对应的 空格数目可能不同导致层次混乱。
# 5. 缩进的空格数目不重要只要相同层级的元素左侧对齐即可
# 6. #表示注释从这个字符一直到行尾都会被解析器忽略。###########################数据类型################################
#字面量普通的值 [ 数字布尔值字符串 ]
boolean: TRUE #TRUE,true,True,FALSE,falseFalse均可
float: 3.14 #6.8523015e5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
string: HelloWorld #字符串可以直接书写数组一组按次序排列的值 List、set #数组一组按次序排列的值 List、set
address:- 北京- 上海- 西安
# 行内写法
commpany: [阿里巴巴,华为,腾讯,字节跳动] 对象、Map键值对 #对象、Map键值对
person1:name: zktsex: 男age: 22
# 行内写法
person2: {name: 李世伟,sex: 男,age: 24}#对象数组格式一
users1:- name: Tomage: 4- name: Jerryage: 5
#对象数组格式二
users2:-name: Tomage: 4-name: Jerryage: 5
#对象数组缩略格式
users3: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ] YAML参数引用 #参数引用
#name: 小gouperson3:name: zktpet: ${name} # 引用上边定义的name值msg1: number${random.uuid} # 配置文件占位符,随机uuid YAML小结 4. 读取配置内容 yaml文件更强大的地方在于他可以给我们的实体类直接注入匹配值 支持方式 逐个注入Value 批量注入1.ConfigurationProperties 2.Environment类 逐个注入演示 Dog类 //PropertySource(value classpath:application.yml)
Component
public class Dog {Value(${name})private String name;Value(${age})private Integer age;get set tostring ..
} yml: name: 小黄
age: 4 加载指定的配置文件PropertySource 加载指定的配置文件 测试结果 批量注入方式1 编写一个复杂一点的实体类Person 类 /*ConfigurationProperties作用
将配置文件中配置的每一个属性的值映射到这个组件中
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix “person” : 将配置文件中的person下面的所有属性一一对应
*/
Component
ConfigurationProperties(prefix person)
public class Person {private String name;private int age;private boolean marry;private Date birth;private MapString,Object maps;private ListObject lists;private Dog dog;
set get tostring..
} yml ###########################批量注入################################
person:name: zktage: 22marry: falsebirth: 2002/11/18maps: {k1: v1,k2: v2}lists:- code- football- sleepdog:name: fireage: 1 ConfigurationProperties作用 将配置文件中配置的每一个属性的值映射到这个组件中 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 参数 prefix “person” : 将配置文件中的person下面的所有属性一一对应 如果编写完配置文件有红色提示则可以添加坐标隐藏 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency 测试类中测试一下 SpringBootTest
class SpringbootInit01ApplicationTests {AutowiredDog dog;AutowiredPerson person;Testvoid contextLoads() {}Testpublic void test(){System.out.println(dog);System.out.println(person);}}运行结果 批量注入方式2了解 直接在测试类中装配开发模式类辅助获取key对应value数据 Autowiredprivate Environment env;Testpublic void test(){ System.out.println(env.getProperty(person1.name));System.out.println(env.getProperty(person1.age));System.out.println(env.getProperty(person1.dog.name));System.out.println(env.getProperty(person1.lists[0]));
} 对比小结 Value这个使用起来并不友好我们需要为每个属性单独注解赋值比较麻烦我们来看个功能对比图 对比ConfigurationPropertiesValue功能批量注入配置文件中的属性一个个指定松散语法支持不支持SpEL不支持支持JSR303数据校验支持不支持复杂类型封装支持不支持 1、ConfigurationProperties只需要写一次即可 Value则需要每个字段都添加2、松散绑定这个什么意思呢? 比如我的yml中写的last-name这个和lastName是一样的 - 后面跟 着的字母默认是大写的。这就是松散绑定。可以测试一下 - 代替 小驼峰 3、JSR303数据校验 这个就是我们可以在字段是增加一层过滤器验证 可以保证数据的合法性4、复杂类型封装yml中可以封装对象 使用value就不支持 结论 配置yml和配置properties都可以获取到值 强烈推荐 yml 如果我们在某个业务中只需要获取配置文件中的某个值可以使用一下 value如果说我们专门编写了一个JavaBean来和配置文件进行一一映射就直接 configurationProperties不要犹豫 5. JSR303数据校验 对于web服务来说为防止非法参数对业务造成影响在 Controller 层一定要做参数校验的大部分 情况下请求参数分为如下两种形式 1. POST 、 PUT 请求使用2. requestBody 传递参数 GET 请求使用 requestParam/PathVariable 传递参数。 JSR的全称是Java Specification RequestsJava 规范提案是指向JCP ( Java Community Process )提出 新增一个标准化技术规范的正式请求。 Java API规范( JSR303 )定义了 Bean 校验的标准 validation-api 但没有提供实现。 validation 是对这个规范的实现并增加了校验注解如 Email 、 Length 等。 hibernate Spring Validation 是对 来我们以 hibernate validation 的二次封装用于支持 spring-boot 项目为例介绍 spring mvc参数自动校验。接下 Spring Validation 的使用 JSR303校验注解的使用步骤 1.添加依赖导入spring-boot-starter-validation启动器 !-- 数据验证 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency 2.在实体类需要校验的成员字段Field上添加校验注解。 Component
ConfigurationProperties(prefix person)
Validated
public class Person {Email(message 邮箱必须合法)NotNull(message 邮箱不能为空)private String email;private String lastName;private String name;Max(value 150,message 给年轻人留点机会吧)private int age;private boolean marry;private Date birth;private MapString,Object maps;private ListObject lists;private Dog dog;
set get tostring ..
}测试 正常结果 练习-处理用户请求并Controller 层做参数校验 方式一 //前端发请求 localhost:8080/savePerson?emailwangyanqq.comnametomage50marrytrue//springMVC框架通过方法的参数进行数据的接受替换之前:request.getParameter(key)RequestMapping(path /savePerson)ResponseBodypublic String savePerson(Person person){System.out.println(person);return 新增成功;}运行结果 方式二 //前端发请求 localhost:8080/savePerson?email123163.comnamezktage22marryfalse//springMVC框架通过方法的参数进行数据的接受替换之前:request.getParameter(key)RequestMapping(path /savePerson)ResponseBodypublic String savePerson(Valid Person person){System.out.println(person);return 新增成功;} 同时需要将Person类注掉 运行结果 注意 不是在测试类运行 是在main中的SpringbootInit01Application运行 JSR303校验注解的分类 值校验 // 被注解的元素必须为nullNull(message 必须为null) // 被注解的元素必须不为nullNotNull(message 必须不为null) // 校验注解的元素值不为空不为null、去除首位空格后长度为0,类型为StringNotBlank(message 必须不为空) // 校验注解的元素值不为null且不为空字符串长度不为0、集合大小不为0,类型为CharSequence、
Collection、Map、ArrayNotEmpty(message 必须不为null且不为空) // 被注解的元素必须为true并且类型为booleanAssertTrue(message 必须为true) // 被注解的元素必须为false并且类型为booleanAssertFalse(message 必须为false) 范围校验 // 被注解的元素其值必须大于等于最小值并且类型为intlongfloatdoubleMin(value 18, message 必须大于等于18)// 被注解的元素其值必须小于等于最小值并且类型为intlongfloatdoubleMax(value 18, message 必须小于等于18)
// 校验注解的元素值大于等于DecimalMin指定的value值并且类型为BigDecimalDecimalMin(value 150, message 必须大于等于150)
// 校验注解的元素值小于等于DecimalMax指定的value值 并且类型为BigDecimalDecimalMax(value 300, message 必须大于等于300)// 校验注解的元素值在最小值和最大值之间并且类型为BigDecimalBigIntegerCharSequencebyteshortintlong。
Range(max 80, min 18, message 必须大于等于18或小于等于80)
// 被注解的元素必须为过去的一个时间并且类型为java.util.DateDateTimeFormat(pattern yyyy-MM-dd HH:mm:ss) Past(message 必须为过去的时
间)// 被注解的元素必须为未来的一个时间并且类型为java.util.DateDateTimeFormat(pattern yyyy-MM-dd HH:mm:ss) Future(message 必须为未来的时
间) 长度校验 // 被注解的元素的长度必须在指定范围内并且类型为StringArrayListMapSize(max 11, min 7, message 长度必须大于等于7或小于等于11)// 校验注解的元素值长度在min和max区间内 并且类型为StringLength(max 11, min 7, message 长度必须大于等于7或小于等于11) 格式校验 // 校验注解的元素值的整数位数和小数位数上限 并且类型为floatdoubleBigDecimal。
Digits(integer3,fraction 2,message 整数位上限为3位小数位上限为2位)// 被注解的元素必须符合指定的正则表达式并且类型为StringPattern(regexp \\d{11},message 必须为数字并且长度为11)// 校验注解的元素值是Email也可以通过regexp和flag指定自定义的email格式类型为StringEmail(message 必须是邮箱) Controller统一异常处理 ControllerAdvice统一为Controller进行增强 ExceptionHandler : 异常处理 实现 在util下新建BindExceptionHandler ControllerAdvice
public class BindExceptionHandler {ExceptionHandler(NullPointerException.class)ResponseBodypublic String show1(NullPointerException e){return 全局异常处理器处理异常;}ExceptionHandler(BindException.class)ResponseBodypublic String show2(BindException e){return 全局异常处理器处理异常;}
}如 年龄超出正常范围 邮箱格式错误 邮箱为空 6. 多环境切换profile 我们在开发Spring Boot应用时通常同一套程序会被安装到不同环境比如开发、测试、生产等。 其中数据库地址、服务 器端口等等配置都不同如果每次打包时都要修改配置文件那么非常麻烦。 profile功能就是来进行动态配置切换的 命名语法 例如application-环境简称.properties/yml application-dev.properties/yml 开发环境application-test.properties/yml 测试环境application-pro.properties/yml 生产环境 1 profile配置方式 多profile文件方式 2 profile激活方式 配置文件 spring:profiles:active: 环境简称 主配置文件里面调用 dev.yml server:port: 8082 test.yml server:port: 8081 故用的就是test 的8081 虚拟机参数 在VM options 指定-Dspring.profiles.activedev 命令行参数java –jar xxx.jar --spring.profiles.activedev