SpringBoot 基于 Spring4.0 设计,不仅继承了 Spring 框架原有的优秀特性,而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。
另外 SpringBoot 通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
SpringBoot 所具备的特征有:
- 可以创建独立的 Spring 应用程序,并且基于其 Maven 或 Gradle 插件,可以创建可执行的 JARs 和 WARs;
- 内嵌 Tomcat 或 Jetty 等 Servlet 容器;
- 提供自动配置的 “starter” 项目对象模型(POMS)以简化 Maven 配置;
- 尽可能自动配置 Spring 容器;
- 提供准备好的特性,如指标、健康检查和外部化配置;
- 绝对没有代码生成,不需要 XML 配置。
本期技术周刊一起了解下 SpringBoot ,欢迎大家阅读 ~
文章推荐
《我服了!SpringBoot 升级后这服务我一个星期都没跑起来!》作者:艾小仙
最近由于各方面的原因在准备升级 Spring Cloud 和 Spring Boot,经过一系列前置的调研和分析,决定把Spring Boot 相关版本从 2.1.6 升级到 2.7.5,Spring Cloud 相关版本从 Greenwich.SR1 升级为 2021.0.4。
升级包含基础的业务服务代码的升级改造适配,还有就是中间件一堆代码的改造,上周经历了一周的修改,用来测试的服务仍然还没有跑起来,所以这篇文章我会记录下来这升级过程中的一些问题,由于革命仍未成功,所以这是上篇。
《几分钟上线一个项目文档网站,这款开源神器实在太香了!》作者:macrozheng
今天带大家体验了一把 Docsify,使用 Docsify 来搭建文档网站确实简单、快捷。对比使用 VuePress 和 Hexo 来搭建文档,虽然功能没有那么强大,但是 Docsify 无需编译、无需打包部署、修改响应迅速、对 Markdown 文档无污染这些优点还是值得肯定的。另外 Docsify 除了一些插件配置,其他配置基本可以使用 Markdown 来完成,感兴趣的小伙伴不妨尝试下它!
《Spring Boot 实现接口幂等性的 4 种方案》作者:Java 架构师
在接口调用时一般情况下都能正常返回信息不会重复提交,不过在遇见以下情况时可以就会出现问题,如:
- 前端重复提交表单: 在填写一些表格时候,用户填写完成提交,很多时候会因网络波动没有及时对用户做出提交成功响应,致使用户认为没有成功提交,然后一直点提交按钮,这时就会发生重复提交表单请求。
- 用户恶意进行刷单: 例如在实现用户投票这种功能时,如果用户针对一个用户进行重复提交投票,这样会导致接口接收到用户重复提交的投票信息,这样会使投票结果与事实严重不符。
- 接口超时重复提交: 很多时候 HTTP 客户端工具都默认开启超时重试的机制,尤其是第三方调用接口时候,为了防止网络波动超时等造成的请求失败,都会添加重试机制,导致一个请求提交多次。
- 消息进行重复消费: 当使用 MQ 消息中间件时候,如果发生消息中间件出现错误未及时提交消费信息,导致发生重复消费。
使用幂等性最大的优势在于使接口保证任何幂等性操作,免去因重试等造成系统产生的未知的问题。
《Springboot 一行代码实现文件上传 20 个平台!少写代码到极致》作者:程序员小富
文件上传在平常不过的一个功能,做后端开发的基本都会接触到,虽然不难可着实有点繁琐。数据流的开闭、读取还容易出错,尤其是在对接一些 OSS 对象存储平台,一个平台一堆 SDK 代码看起来乱糟糟的。
下边给我大家推荐一个工具 Spring File Storage,上传文件只要些许配置一行代码搞定,开发效率杠杠的,一起看看是不是有这么流批!
《从 SpringBoot 启动,阅读源码设计》作者:知了一笑
初学 SpringBoot 框架时,第一次启动服务,直呼什么鬼?只需要简单的几步配置,几个核心的注解,就可以快速实现工程的搭建和运行;
虽然从 Spring 框架迁移到 SpringBoot 框架,在初期会有很多的不适应,但是更好用的框架会快速得到认可,从而成为主流的技术选型;
对于大多数的框架或者组件来说,如果使用起来越是简便,那么其内部的封装策略就越是复杂;
比如在 Spring 框架更新到 SpringBoot 版本时,其用法的简便与内部封装的复杂性已经形成强烈的对比;再到 SpringCloud 微服务框架时,其封装逻辑复杂到离谱;
对于服务端的开发来说,绕不开对 Spring 框架的深度学习,如果单纯站在源码阅读的角度,建议先熟读 SpringBoot 启动流程,然后再适当扩展其他源码块;
《如何查询已经执行过的流程信息?》作者:江南一点雨
查询历史流程的方式很简答,如下:
@SpringBootTest
public class HiTest {
@Autowired
HistoryService historyService;
private static final Logger logger = LoggerFactory.getLogger(HiTest.class);
@Test
void test01() {
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hi : list) {
logger.info("==={},{},{},{},{},{}",hi.getId(),hi.getName(),hi.getStartActivityId(),hi.getStartTime(),hi.getEndActivityId(),hi.getEndTime());
}
}
}
由于我们这是 Spring Boot 项目,所以基本上不需要什么额外的配置,直接注入 HistoryService 实例即可。
《手把手教大家在 Spring Boot 中处理 flowable 中的用户和组!》作者:
江南一点雨
虽然说我们在实际开发中,很少会直接用到 flowable 中的用户体系,但是,也不太可能完全用不到,毕竟官方设计了这个东西,而存在就必然有其合理性,所以,今天松哥还是来和大家聊一聊,在 Spring Boot 项目中,我们如何去添加、删除、修改一个用户或者组。
问答推荐
关于 SpringBoot 的问题,还有未解决的,欢迎正在阅读的小伙伴们一起来解决!
- SpringBoot 2.6+上传文件失败?
- SpringBoot 怎么上传图片到远程服务?
- 接入第三方平台时,单点登陆该怎么实现?
- Springboot 上传接受文件上传参数 null,Configuration注入bean 失败?
- SpringBoot 单元测试 @ConfigurationProperties?
- 如何使用 springboot 动态连接指定地址的 redis?
- springboot 打印所有请求参数,代码如下,为啥打印出来的是内存地址,并且没有打印 header 的信息?
# SegmentFault 技术周刊 #
「技术周刊」是社区特别推出的技术内容系列,一周一主题。
每周二更新,欢迎「关注」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。
如有问题可以添加小姐姐微信~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。