#Spring Boot

@Autowired注解相信每个Spring开发者都不陌生了!在DD的Spring Boot基础教程和Spring Cloud基础教程中也都经常会出现。 但是当我们使用IDEA写代码的时候,经常会发现@Autowired注解下面是有小黄线的,我们把小鼠标悬停在上面,可以看到这个如下图所示的警告信息: 那么为什么IDEA会给出Field injection is not recommended这样的警告呢? 下面带着这样的问题,一起来全面的了解下Spring中的三种注入方式以及他们之间在各方面的优劣。 Spring中的三种依赖注入方式Field Injection@Autowired注解的一大使用场景就是Field Injection。 具体形式如下: @Controllerpublic class UserController { @Autowired pri...

项目场景:ClickHouse 操作基于 Mybatis-puls源码扩展开发。解决ClickHouse的修改和删除 SQL操作与Mysql不相同。 基于 Mybatis-puls:update 、updateById 、 delete 函数 1、SqlMethodDiv.java 文件枚举类,对sql脚本定义 package com.demo.infrastructure.injector.enums; /** * @author liuxiansong */public enum SqlMethodDiv { /** * 删除 */ DELETE_BY_ID("deleteByIdClickHouse", "根据ID 删除一条数据", "<script>\nALTER TABLE %s DELETE WHERE %s=# ...

10月21日,Spring官方发布了Spring Boot 2.5.6版本,此版本包括 43 个错误修复、文档改进和依赖项升级。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> <!-- lookup parent from repository --></parent> 缺陷修复 由于 R2DBC 优先于 JDBC,jOOQ 的 DSLContext 不可用时的误导性故障分析#28379 启用延迟初始化,JMX 端点...

日子一天天的在过,TJ君这两天一直有点惆怅,为啥呢?因为TJ君发现双11越来越近了,一想到等到了那天,TJ君的荷包会被某种不可抗拒之力打开大门,TJ君真是食不知味、寝食难安。 不过想到了双11就想到了淘宝天猫,似乎现在每天逛逛天猫已经成了很多人的习惯,那何不弄个天猫的复刻项目研究研究,说干就干! 今天TJ君给大家分享的就是一款基于Spring Boot的迷你天猫商城复刻项目,是一个比较基础、易学、入门款的Spring Boot体系的电商项目,适合想入手此类项目的小伙伴试试手。 作为迷你天猫,自然包含了天猫的大多数功能,从用户登录注册开始,到浏览各种商品,将商品加入购物车或者收藏,然后进行下单付费买货,到最后的确认收货,给五星好评等等等等一系列的基本操作,在这款迷你天猫里都有,而在后台管理方面,对于在售商品的管理,各种订单的处理,商家以及用户的管理和整体交易统计,也是应有尽有。并且项目...

最近有个粉丝提了个问题,说他在Spring Security中用JWT做退出登录的时无法获取当前用户,导致无法证明“我就是要退出的那个我”,业务失败!经过我一番排查找到了原因,而且这个错误包括我自己的大部分人都犯过。 Session会话之所以要说Session会话,是因为Spring Security默认配置就是有会话的,所以当你登录以后Session就会由服务端保持直到你退出登录。只要Session保持住,你的请求只要进入服务器就可以从ServletRequest中获取到当前的HttpSession,然后会根据HttpSession来加载当前的SecurityContext。相关的逻辑在Spring Security默认的过滤器SecurityContextPersistenceFilter中,有兴趣可以看相关的源码。 而且默认情况下SecurityContextPersisten...

在Spring Boot项目中,可以通过@EnableScheduling注解和@Scheduled注解实现定时任务(在DD的Spring Boot教程中就有介绍:使用@Scheduled实现定时任务),也可以通过SchedulingConfigurer接口来实现定时任务。但是这两种方式不能动态添加、删除、启动、停止任务。 下面是DD在简书上看到的一篇非常不错的文章,作者jessehua,通过扩展Spring自带的定时任务,实现了定时任务的动态增删启停。如果你也有这样的需求,那么可以看看下面的内容,学习一下作者的思路。 要实现动态增删启停定时任务功能,比较广泛的做法是集成Quartz框架。但是本人的开发原则是:在满足项目需求的情况下,尽量少的依赖其它框架,避免项目过于臃肿和复杂。 查看spring-context这个jar包中org.springframework.scheduli...

最近几年的项目我都用JWT作为身份验证令牌。我一直有一个疑问:服务端发放给浏览器的JWT到底应该存储在哪里?这里只讨论浏览器的场景,在这个场景里有三种选择。 Cookie服务端可以将JWT令牌通过Cookie发给浏览器,浏览器在请求服务端接口时会自动在Cookie头中带上JWT令牌,服务端对Cookie头中的JWT令牌进行检验即可实现身份验证。但它容易受到CSRF攻击的影响。 解决的方法是通过设置Cookie的SameSite属性为Strict。跨站时不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。 Cookie除了易受CSRF攻击还有XSS攻击。黑客可以通过JS脚本读取Cookie中的信息。为了防止这一点,可以设置Cookie的属性为HttpOnly。 response.setHeader("Set-Cookie", "jwt=jwt...

在本站看完了DD的Spring Boot教程之后,是不是很想再来一个更贴近实战项目学习一下? 今天TJ就顺手给大家推荐一个不错的前后端分离项目,该项目是一个采用SpringBoot + Vue来实现的一个网页版聊天室。 读者可以通过源码学习Spring Boot更为实战的应用,如果你正在做大作业或相关的毕业设计,也可以作为基础参考。 简介聊天室使用Spring Security安全框架对于登录权限认定进行密码的加密处理,使用WebSocket+Socket.js+Stomp.js实现聊天消息的传输。 同时服务器使用FastDFS文件服务器保存聊天过程中产生的图片,再结合Vue.js与Element UI进行弹窗和数据表格分页等展示效果。 数据库方便使用MyBatis结合MySQL进行相应的开发。 前后端技术栈: 前端: Vue ElementUI axios vue-router ...

在如今的关系型数据库中,有两个开源产品是你必须知道的。其中一个是MySQL,相信关注我的小伙伴们一定都不陌生,因为之前的Spring Boot关于关系型数据库的所有例子都是对MySQL来介绍的。而今天我们将介绍另外一个开源关系型数据库:PostgreSQL,以及在Spring Boot中如何使用。 PostgreSQL简介在学习PostgreSQL的时候,我们总是会将其与MySQL放一起来比较:MySQL自称是最流行的开源数据库,而PostgreSQL则标榜自己是最先进的开源数据库,那么有多先进呢?下面就一起认识一下它! PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。Postg...

9 月 23 日官方发布了 Spring Boot 2.5.5 版本,此版本包括 41 个错误修复、文档改进和依赖项升级。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.5</version> <relativePath/> <!-- lookup parent from repository --></parent> 缺陷修复 修复 端点默认情况下不会清理 SPRING_APPLICATION_JSON #28081 Flyway 和 Spring Integratio...

Spring Boot的上传文件,相信你一定会了。如果还不会的小伙伴,可以先看看之前的分享: Spring Boot 2.x基础教程:实现文件上传 Spring Boot 2.x基础教程:多文件的上传 文件上传实现之后,通常最常见的另外两个操作就是下载和预览,下载只需要知道地址,就简单搞定了,那么预览怎么做?你知道吗? 今天小编就来推荐一个用Spring Boot搭建的文档在线预览解决方案:kkFileView! 这是一款成熟且开源的文件文档在线预览项目解决方案,如果你用过类似如永中office、office365、idocv这些付钱产品,你一定会喜欢kkFileView,因为在功能满足的前提下,谁还喜欢付费呢? 12大特性 支持word excel ppt,pdf等办公文档 支持txt,java,php,py,md,js,css等所有纯文本 支持zip,rar,jar,tar,...

通过之前三篇关于Spring Boot异步任务实现的博文,我们分别学会了用@Async创建异步任务、为异步任务配置线程池、使用多个线程池隔离不同的异步任务。今天这篇,我们继续对上面的知识进行完善和优化! 如果你已经看过上面几篇内容并已经掌握之后,一起来思考下面这个问题: 假设,线程池配置为核心线程数2、最大线程数2、缓冲队列长度2。此时,有5个异步任务同时开始,会发生什么? 场景重现我们先来把上面的假设用代码实现一下: 第一步:创建Spring Boot应用,根据上面的假设写好线程池配置。 @EnableAsync@SpringBootApplicationpublic class Chapter78Application { public static void main(String[] args) { SpringApplicatio...

通过上一篇:配置@Async异步任务的线程池的介绍,你应该已经了解到异步任务的执行背后有一个线程池来管理执行任务。为了控制异步任务的并发不影响到应用的正常运作,我们必须要对线程池做好相应的配置,防止资源的过渡使用。除了默认线程池的配置之外,还有一类场景,也是很常见的,那就是多任务情况下的线程池隔离。 什么是线程池的隔离,为什么要隔离可能有的小伙伴还不太了解什么是线程池的隔离,为什么要隔离?。所以,我们先来看看下面的场景案例: @RestControllerpublic class HelloController { @Autowired private AsyncTasks asyncTasks; @GetMapping("/api-1") public String taskOne() { Completab...

上一篇我们介绍了如何使用@Async注解来创建异步任务,我可以用这种方法来实现一些并发操作,以加速任务的执行效率。但是,如果只是如前文那样直接简单的创建来使用,可能还是会碰到一些问题。存在有什么问题呢?先来思考下,下面的这个接口,通过异步任务加速执行的实现,是否存在问题或风险呢? @RestControllerpublic class HelloController { @Autowired private AsyncTasks asyncTasks; @GetMapping("/hello") public String hello() { // 将可以并行的处理逻辑,拆分成三个异步任务同时执行 CompletableFuture<String> task1 = asyncTasks...

什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 同步调用下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) @Slf4j@Componentpublic class AsyncTasks { public static Random random = new Random(); public void doTaskOne() throws Exception { log.info("开始做任务一"); long start = System.currentTimeMil...