Spring Boot的新篇章:探索2.0版的创新功能
文章目录
- 引言
- 1. Spring Boot 2.0的响应式编程
- 2. 自动配置的改进
- 3. Spring Boot 2.0的嵌入式Web服务器
- 4. Spring Boot 2.0的Actuator端点
- 5. Spring Boot 2.0的Spring Data改进
- 6. Spring Boot 2.0的安全性增强
- 7. Spring Boot 2.0的监控和追踪
- 8. Spring Boot 2.0的测试改进
- 结论
![在这里插入图片描述](https://img-blog.csdnimg.cn/579a429daf314744b995f37351b46548.gif#pic_center)
🎉欢迎来到架构设计专栏~Spring Boot的新篇章:探索2.0版的创新功能
- ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
- ✨博客主页:IT·陈寒的博客
- 🎈该系列文章专栏:架构设计
- 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
- 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
- 📜 欢迎大家关注! ❤️
Spring Boot是Java世界中最受欢迎的微服务框架之一,其简化的配置和开箱即用的特性使得构建企业级应用变得更加容易。随着时间的推移,Spring Boot不断演进,为开发者提供了许多创新功能。本文将深入探讨Spring Boot 2.0版本中的一些新功能,以及如何在项目中应用它们。
引言
Spring Boot 2.0于2018年发布,带来了一系列令人兴奋的新功能和改进。这些变化不仅提高了性能和可维护性,还增加了开发者的生产力。让我们一起来看看其中一些关键的新功能。
1. Spring Boot 2.0的响应式编程
响应式编程是现代应用程序开发的趋势,它允许开发者构建具有高度响应性和弹性的应用程序。Spring Boot 2.0引入了对响应式编程的支持,通过整合Project Reactor库来实现。你可以使用Mono
和Flux
这两个新的数据类型来构建响应式应用程序。
@GetMapping("/flux")
public Flux<String> flux() {return Flux.just("Spring", "Boot", "2.0").delayElements(Duration.ofSeconds(1));
}
这个简单的示例展示了如何创建一个返回字符串流的响应式控制器方法。这些响应式特性使Spring Boot更适合构建高吞吐量和低延迟的应用程序。
2. 自动配置的改进
Spring Boot一直以来以自动配置而闻名,使得应用程序的配置变得简单。Spring Boot 2.0进一步改进了自动配置,增加了更多的条件和灵活性。你可以使用@ConditionalOnProperty
和@ConditionalOnClass
等条件注解来根据特定的条件来配置Bean。
@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyFeatureAutoConfiguration {// 自动配置的Bean
}
这个示例展示了如何在满足myapp.feature.enabled=true
条件时自动配置一个Bean。这使得开发者能够更灵活地根据需求来配置应用程序。
3. Spring Boot 2.0的嵌入式Web服务器
Spring Boot 2.0引入了对Java 9和Java 10的支持,并默认使用嵌入式的Web服务器。这意味着你可以在不需要外部Web服务器的情况下构建和运行Web应用程序。Spring Boot支持多个嵌入式Web服务器,包括Tomcat、Jetty和Undertow。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
只需添加上述依赖,你就可以创建一个简单的Spring Boot Web应用程序。
4. Spring Boot 2.0的Actuator端点
Spring Boot的Actuator模块提供了一组强大的端点,用于监控和管理应用程序。Spring Boot 2.0增加了更多的Actuator端点,包括/actuator/health
、/actuator/info
、/actuator/prometheus
等。这些端点允许你检查应用程序的健康状态、获取有关应用程序的信息以及导出Prometheus格式的指标数据。
management.endpoints.web.exposure.include=health,info,prometheus
通过配置文件,你可以选择公开哪些端点,以便进行监控和管理。
5. Spring Boot 2.0的Spring Data改进
Spring Boot 2.0与Spring Data的集成得到了改进,使得访问数据库变得更加容易。它支持嵌入式数据库,如H2,以便更容易进行开发和测试。同时,Spring Boot还提供了与NoSQL数据库的集成,如MongoDB和Redis。
// 配置一个MongoDB的Repository
@Repository
public interfaceUserRepository extends MongoRepository<User, String> {List<User> findByLastName(String lastName);
}
这个示例展示了如何创建一个MongoDB的Repository,以便进行数据操作。
6. Spring Boot 2.0的安全性增强
Spring Boot一直以来都注重安全性,2.0版本进一步增强了安全性特性。它引入了基于OAuth 2.0的认证,允许你轻松地将身份验证和授权集成到应用程序中。此外,Spring Boot还提供了对JWT(JSON Web Tokens)的支持,用于构建安全的RESTful API。
// 配置基于OAuth 2.0的安全性
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {// 配置安全规则
}
这个示例展示了如何配置基于OAuth 2.0的安全性,以保护你的应用程序。
7. Spring Boot 2.0的监控和追踪
Spring Boot 2.0增强了对应用程序的监控和追踪。它引入了Micrometer,这是一个通用的监控度量库,用于导出应用程序的度量数据。你可以将Micrometer与各种监控系统集成,如Prometheus、Grafana和Elasticsearch,以便更好地了解应用程序的性能和健康状况。
management.metrics.export.prometheus.enabled=true
通过配置文件,你可以启用Prometheus度量数据的导出,从而实现对应用程序的监控。
8. Spring Boot 2.0的测试改进
Spring Boot一直注重测试,2.0版本进一步改进了测试支持。它引入了@SpringBootTest
注解,允许你轻松地进行集成测试。同时,Spring Boot还提供了TestRestTemplate
,用于编写RESTful API的集成测试。
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyControllerIntegrationTest {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void testApiEndpoint() {ResponseEntity<String> response = restTemplate.getForEntity("/api/endpoint", String.class);assertEquals(HttpStatus.OK, response.getStatusCode());}
}
这个示例展示了如何编写一个集成测试,以验证API的行为。
结论
Spring Boot 2.0为Java开发者带来了许多创新功能和改进,使得构建现代应用程序变得更加容易。从响应式编程到自动配置的改进,从嵌入式Web服务器到监控和追踪,Spring Boot 2.0提供了丰富的功能集,可以满足各种应用程序的需求。如果你还没有尝试过Spring Boot 2.0,那么现在正是时候探索这个新篇章了。不断学习和实践这些新功能将使你成为一名更出色的Spring Boot开发者,能够构建出高性能、可维护的应用程序。
🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:
- 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
- 【Java学习路线】2023年完整版Java学习路线图
- 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
- 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
- 【数据结构学习】从零起步:学习数据结构的完整路径
相关文章:
![](https://img-blog.csdnimg.cn/d7565cfc032647bfb69e7971731a06a2.gif#pic_center)
Spring Boot的新篇章:探索2.0版的创新功能
文章目录 引言1. Spring Boot 2.0的响应式编程2. 自动配置的改进3. Spring Boot 2.0的嵌入式Web服务器4. Spring Boot 2.0的Actuator端点5. Spring Boot 2.0的Spring Data改进6. Spring Boot 2.0的安全性增强7. Spring Boot 2.0的监控和追踪8. Spring Boot 2.0的测试改进结论 &…...
![](https://img-blog.csdnimg.cn/f8403cacc6744791978da517d97f806d.png)
5、SpringBoot_热部署
六、热部署 1.热部署概述 概述:程序更改后,不需要重新启动服务器也能够实现动态更新 springboot 项目如何实现热部署? tomcat 已经内置到项目容器中了希望tomcat监听外部程序变化通过新建一个程序来监控你代码的变化 2.依赖导入 依赖 <…...
![](https://img-blog.csdnimg.cn/cb137f335bbd4820a77035b7415b8d92.png)
【kohya】训练自己的LoRA模型
文章目录 序言准备环境准备图片处理图片下载kohya_ss代码修改pyvenv.cfg启动界面访问地址生成字幕准备训练的文件夹配置训练参数开始训练遇到的问题: 序言 在把玩stable diffusion的webUI和comfyUI后,思考着自己也微调一个个性化风格的checkpoint、LyCO…...
![](https://img-blog.csdnimg.cn/71ab08e3e5ee4605b91a69c446153826.png)
[尚硅谷React笔记]——第1章 React简介
目录: 第1章 React简介 React的基本使用:虚拟DOM的两种创建方式: 使用jsx创建虚拟DOM使用js创建虚拟DOM(一般不用)虚拟DOM与真实DOM:React JSX:JSX练习:模块与组件、模块化与组件化的理解 模块组件模块化组件化 第1章 React简介 中文官网: …...
![](https://www.ngui.cc/images/no-images.jpg)
Debezium系列之:快照参数详解
Debezium系列之:快照参数详解 一、snapshot.select.statement.overrides二、min.row.count.to.stream.results三、snapshot.delay.ms四、snapshot.fetch.size五、snapshot.lock.timeout.ms六、incremental.snapshot.allow.schema.changes七、incremental.snapshot.chunk.size八…...
![](https://www.ngui.cc/images/no-images.jpg)
redis单机版搭建
title: “Redis单机版搭建” createTime: 2022-01-04T20:43:1108:00 updateTime: 2022-01-04T20:43:1108:00 draft: false author: “name” tags: [“redis”] categories: [“install”] description: “测试的” redis单机版搭建 安装环境 redis版本redis-5.0.7虚拟机系统…...
![](https://www.ngui.cc/images/no-images.jpg)
物联网边缘网关
物联网边缘网关 边缘网关的定义边缘网关的分类边缘计算网关平台相关产品有哪些 百度边缘计算平台(BIE)华为边缘计算平台(IEF)产品应用拓扑图产品价格区间...
![](https://www.ngui.cc/images/no-images.jpg)
docker部署springboot程序时遇到的network问题
对应问题,因为刚开始接触docker,所以问题可能比较简单,但是做个记录 1、启动一个springboot项目获取本地ip的时候获取到的是172.17.0.x这个ip;在使用一些注册中心,mq的时候又要表明自己的本机器ip的时候会比较头疼&…...
![](https://img-blog.csdnimg.cn/img_convert/73ca4b1f8f76744a5d544926b1323f24.png)
RASP hook插桩原理解析
javaagent技术,实现提前加载类字节码实现hook,插桩技术 javassist技术ASM字节码技术 像加载jar,有两种方式 premain启动前加载:每次变动jar包内容,都需要进行重启服务器利用java的动态attch加载原理,采用pr…...
![](https://www.ngui.cc/images/no-images.jpg)
Pygame中Sprite的使用方法6-5
3 碰撞检测 蓝色方块会随着鼠标移动,当碰到绿色方块时,则当前分数加1,当碰到红色方块时,当前分数减1。因为要随时进行碰撞检测,因此需要在while True循环中实现以下功能。 3.1 蓝色方块随鼠标移动 将蓝色方块的位置…...
![](https://img-blog.csdnimg.cn/7ef9f81898134c3ab1255554c8824362.png)
浅谈为什么多态只能是指针或引用
其实在很早之前,我一直没有注意到这个问题,直到今天碰见了一道题,顺便前面的博客中,继承写到,子类中不包含父类,子类只是继承了父类的成员变量和函数,由这一点,引发了我对切片以及赋…...
![](https://www.ngui.cc/images/no-images.jpg)
js看代码说输出
目录 原型 Function与Object new fn() 原型链 constructor function.length 默认参数:第一个具有默认值之前的参数个数 剩余参数:不算进length 闭包 循环中 函数工厂:形参传递 IIFE:匿名闭包 let:闭包 forEach()&am…...
![](https://www.ngui.cc/images/no-images.jpg)
Java笔记:使用javassist修改class文件内方法
1.前言 在工作突然有一个需求。线上运维的一个tomcat的web项目,运行的程序不正常。需要修改代码。可是这个项目代码非常的老,并且公司存储的源代码跟线上的不一致。 我了个擦,没有源代码但是还要结局客户的问题。只能到线上将对应程序的clas…...
![](https://img-blog.csdnimg.cn/37300bd5eefe4ec3a8b13d759333dcaf.png)
华为云云耀云服务器L实例评测 |云服务器性能评测
通过上一篇文章华为云云耀云服务器 L 实例评测 |云服务器选购,我已经购买了一台 Centos 系统的云耀云服务器 L 实例。 在获得云耀云服务器 L 实例后,首要任务是熟悉云耀云服务器 L 实例的性能,对云耀云服务器 L 实例的性能进行测…...
![](https://img-blog.csdnimg.cn/7a299db3cae84b6194c514f021d31d71.png)
iphone的safari浏览器实现全屏的pwa模式,并修改顶部状态栏背景颜色
要想修改顶部背景颜色,需要用到这个属性:content就是你要设置的颜色 <!-- 状态栏的背景色 --><meta name"theme-color" content"#f8f8f8" /> 然后再加上下面的设置: <!-- 网站开启对 web app 程序的支持…...
![](https://img-blog.csdnimg.cn/81b31a89f4394372b762d66ed627c1e1.png)
springboot对接rabbitmq并且实现动态创建队列和消费
背景 1、对接多个节点上的MQ(如master-MQ,slave-MQ),若读者需要自己模拟出两个MQ,可以部署多个VM然后参考 docker 安装rabbitmq_Steven-Russell的博客-CSDN博客 2、队列名称不是固定的,需要接受外部参数&…...
![](https://img-blog.csdnimg.cn/e3b3abff1e264665889083c72d3cf6c7.png)
Spring的后处理器-BeanFactoryPostprocessor
目录 Spring后处理器 Bean工厂后处理器-BeanFactoryPostProcessor 修改beanDefinition对象 添加beanDefiniton对象 方法一 方法二 自定义Component Spring后处理器 Spring后处理器是Spring对外开放的重要拓展点(让我们可以用添加自己的逻辑)&…...
![](https://img-blog.csdnimg.cn/ca2972144d154c8d9a9b3013afd3e031.png)
Flutter 必备知识点
Flutter 升级 确保在项目根目录下(含有 pubspec.yaml 的文件夹) 在命令行中输入命令: flutter channel输出: Flutter channels: * mastermainbetastable这个可以在 pubspec.yaml 中查看: 切换分支也很简单…...
![](https://img-blog.csdnimg.cn/img_convert/034f77852e60a18b7e8b0e858c7fab81.png)
什么是FMEA(失效模式和影响分析)?
失效模式和影响分析(FMEA)是一个在开发阶段,用于确定产品或流程可能的风险和失败点的有条理的过程。FMEA团队会研究失效模式,也就是产品或流程中可能出错的地方,以及这些失效可能带来的影响(如风险、损害、…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis面试题(三)
文章目录 前言一、怎么理解 Redis 事务?二、Redis 事务相关的命令有哪几个?三、Redis key 的过期时间和永久有效分别怎么设置?四、Redis 如何做内存优化?五、Redis 回收进程如何工作的?六、 加锁机制总结 前言 怎么理…...
![](https://www.ngui.cc/images/no-images.jpg)
Python错误处理指南:优雅应对异常情况
目录 一. 异常是什么?二. 使用 try 和 except三. 捕获多个异常四. 使用 else五. 使用 finally六. 自定义异常七.Python中常见异常处理类型八.Python中常见异常处理实例九.异常处理最佳实践十.结论 当编写Python代码时,错误处理是一个重要的方面ÿ…...
![](https://img-blog.csdnimg.cn/6fa47d50d16b4265a06aa2037d2f944d.png)
MySQL学习笔记12
MySQL 查询语句: 1、查询五子句:(重点) mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句; 1)where 子句;条件筛选。 2)group…...
![](https://img-blog.csdnimg.cn/4415d444eefc4be1ac19ccfd66049c65.png)
【owt】构建m79的owt-client-native:使用vs2017
家里电脑换成了台式机,拷贝代码发现了三年前的owt客户端mfc工程。 不用下载第三方库,试着构建下: owt-client-native 我这里有3年前的代码,思索了下还是用vs2017构建吧: 重新构建一下 选用x86 的 vs2017 vs的命令行控制台 cls可以清理屏幕 之前构建过vs2022的webrtc原版 …...
![](https://img-blog.csdnimg.cn/f330d79a95684866915dfc8cc6042e5a.png)
Cpp/Qt-day020918Qt
目录 完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两…...
![](https://img-blog.csdnimg.cn/6ee6699663814260810c37021a308ff6.png)
Spring面试题10:Spring的XMLBeanFactory怎么使用
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…...
![](https://img-blog.csdnimg.cn/f197bc5bf465436dbab5a9ceb324b3a3.gif)
自定义数据类型
前言:小伙伴们又见面啦,今天这篇文章,我们来谈谈几种自定义数据类型。 目录 一.都有哪些自定义数据类型 二.结构体 结构体内存对齐 1.如何对齐 2.为什么要对齐 3.节省空间和提升效率的方法 (1)让占用空间小的成员…...
![](https://www.ngui.cc/images/no-images.jpg)
产品团队的需求验证和确认
需求核实过程是确保软件满足特定的规格要求,而验证则侧重于软件是否达到了最终用户的期望和需求。 如果你正在开发一种医疗产品,这种区别也可能在法规和标准中有所体现,例如: 820.30(f):设计验证应确认设计的成果符合…...
![](https://img-blog.csdnimg.cn/img_convert/5660a30fac52af16491f3f25d042c255.png)
【JVM】类加载的过程
文章目录 类的生命周期加载验证准备解析初始化简要概括 类的生命周期 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型
上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别,本文讲解下分组、上下文和属性值类型 分组输出 slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容,取决于使用的 handler,例如 TextHandler 使用点号分隔…...
![](https://img-blog.csdnimg.cn/img_convert/692b7d2d81161a0bc2d3d71d05241e8c.jpeg)
小白学Python:提取Word中的所有图片,只需要1行代码
#python# 大家好,这里是程序员晚枫,全网同名。 最近在小破站账号:Python自动化办公社区更新一套课程:给小白的《50讲Python自动化办公》 在课程群里,看到学员自己开发了一个功能:从word里提取图片。这个…...
![](/images/no-images.jpg)
中山网站建设价位/搜狗搜图
今天进行了我的微博研究:当其他人在发我时,将他的微博保存到“我”界面。单击我后显示所有我的微博。要在微博首页单击顶部菜单栏“信封图标”下“我的”,才能进入我界面。转载于:https://www.cnblogs.com/gaoemm/p/10242171.html...
![](/images/no-images.jpg)
北方明珠网站建设/如何在百度上发布自己的广告
题目链接:https://vjudge.net/contest/68966#problem/Q 分析:这里的对称并不是指的是关于原矩阵(也就是最大的那一个)主对角线对称,而是对于每一个小的矩阵来说,当前矩阵的对反对角线。 #include<iost…...
![](/images/no-images.jpg)
北京海淀区派出所/seo的主要工作是什么
Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。 LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如…...
![](https://img-blog.csdnimg.cn/20210606221213396.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzU1Mzgw,size_16,color_FFFFFF,t_70)
滨州五学一做考试网站/线上宣传推广方案
国民技术通用MCU N32G452系列芯片简介 产品简介 N32G452系列 (通用基本型) 采用32-bit ARM Cortex-M4内核,支持浮点运算和DSP指令,高达512KB 片内FLASH,144KB SRAM,多达18个数字通讯接口及4个模拟接口,内置10余种密码…...
![](https://images0.cnblogs.com/blog/161845/201304/12005102-6a38d80ecad5436bba12f7f2280062cf.jpg)
网站建设建设公司/网页设计制作网站
晕啊,今天不顺啊,白天毕设因为一个小问题耽误了很长时间,刚写了一半了突然浏览器又卡死,打开后又待重新写。。。。。。 1 创建项目 这个不多说,新建个Web project都会吧。 2 导入Extjs文件 在WebRoot下新建ext文件夹&a…...
![](/images/no-images.jpg)
苏州微网站建设/企业为何选择网站推广外包?
参考《导弹飞行力学》 对部分参数的解释: dx/dtf(t,x): 之前一直看不懂f(t,x)到底指的哪个式子,其实在开头就提出来了,f是dy K2△t*f(tk△t/2,xk1/2*K1):t在导弹飞行力学,是y(0)(M中是1),所…...