
Spring Boot
文章平均质量分 75
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
我心向阳iu
CSDN专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
如遇开发、程序等需求,博客首页下拉加入公众号,私信博主
展开
-
SpringBoot:深入理解 @EqualsAndHashCode(callSuper = false)
在Java编程中,注解是一种常见的用于生成和方法的工具。通过使用该注解,我们可以轻松地为类生成这两个方法,而无需手动编写它们。然而,其中的一个选项 或许在某些情况下会引起一些疑惑。在本文中,我们将深入探讨 的用法、意义以及相关的注意事项。在开始讨论 之前,让我们先了解一下 注解的基本概念。 是 Lombok 提供的一个注解,它的作用是自动生成 和 方法。在使用该注解时,Lombok会自动根据类中的字段来生成这两个方法的实现,省去了开发者手动编写的繁琐工作。以下是一个简单的示例:在上面的代码中,原创 2024-03-22 09:19:49 · 1557 阅读 · 0 评论 -
SpringBoot 启动打印 Banner:佛祖保佑,永无BUG!
在Resources目录下的 application.yml 中添加以下配置。修改 application.yml 指定banner打印文件。在Resources目录下新建 banner.txt。打印完了,一点bug不出,果然,程序的尽头是玄学。原创 2023-02-21 19:53:45 · 3835 阅读 · 1 评论 -
一步一步解读 refresh源码
ApplicationContext没有Bean初始化,依赖注入等功能他都没有,他得简介的调用BeanFactory 来对Bean进行管理,ApplicationContext委托给BeanFactory 来干这些活,ApplicationContext做的是扩展的活,Bean的核心功能是在BeanFactory 中。下面我们深入探究下里面的ResourceEditorRegistrar资源类型转化器,我们可以看到不同的资源类型用不同转化器转化。我们在prepareRefresh();原创 2022-10-17 18:12:23 · 1245 阅读 · 0 评论 -
SpringBean什么时候用单例模式什么时候用多例?
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)Spring bean 默认是单例模式。原创 2022-10-17 18:37:39 · 1824 阅读 · 0 评论 -
SpringBoot多文件配置,加载顺序与位置
如果不希望使用默认的application.properties作为配置文件名,可以通过指定spring.config.name环境属性来切换其他的名称。也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分割)Spring boot为了适应开发环境或生产环境的变化,专门打造profile通过指定参数来快速切换环境,比如说开发环境我们就可以用dev,生产环境就可以用prod。运行jar包,激活profile。举个栗子,配置三个开发环境文件。原创 2022-09-12 10:58:07 · 2548 阅读 · 0 评论 -
Jedis入门及对Redis数据结构的操作
redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。于是乎redis在现在的应用中使用的非常广泛。提供缓存服务,存储访问频率高的热数据防止穿透到数据库在分布式系统中可以作为实现分布式锁的一种实现方案那jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用。原创 2022-09-12 20:43:10 · 1560 阅读 · 0 评论 -
yaml支持的三种数据的结构及其获取(代码实战)
PS:yaml与yml一样哈,这里我就用yaml,因为多个啊,哈哈哈哈YAML 支持的三种数据的结构。原创 2022-09-12 09:31:49 · 2775 阅读 · 0 评论 -
SpringSecurity简介及其入门案例
Spring Security bean 的核心类核心类说明提供对 SecurityContext 的访问持有 Authentication 对象和其他可能需要的信息其中可以包含多个 AuthenticationProvider对象为 AuthenticationManager 接口的实现类主要用来进行认证操作的类 调用其中的 authenticate()方法去进行认证操作Spring Security 方式的认证主体对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示。原创 2022-09-17 21:33:35 · 1479 阅读 · 0 评论 -
SpringBoot异常处理——异常显示的页面
比如我们在error下没有设置4xx相关的错误页面,当发生状态码为4xx的错误时,找不到相关的错误处理页面,这时会走一个统一的错误处理页面。一般会在templates下创建error.html,作为统一的错误处理页面。如果项目中不存在具体状态码的页面或没有使用x成功匹配的页面时,显示error.html作为错误显示页面。例如当出现500时显示的页面为500.html,当出现404时显示的页面为404.html,直接这样太丑了,我们实际上线项目时,如果给用户显示这个页面就不是很友好,用户直接不用了。原创 2022-09-12 13:56:12 · 3969 阅读 · 3 评论 -
SpringSecurity 授权详解
在前面讲解了认证中所有常用配置,主要是对 http.formLogin()进行操作。而在配置类中 http.authorizeRequests()主要是对 url 进行控制,也就是我们所说的授权(访问控制)。url 匹配规则 . 权限控制方法通过上面的格式可以有很多 url 匹配规则和很多权限控制方法。这些内容进行各种组合就形成了 Spring Security 中的授权。在所有匹配规则中取所有规则的交集。配置顺序影响了之后授权效果,越是具体的应该放在前面,越是笼统的应该放到后面。原创 2022-09-18 16:36:34 · 1809 阅读 · 0 评论 -
SpringSecurity 认证详解
当什么也没有配置的时候,账号和密码是由 Spring Security 定义生成的(如下图密码)。但是在实际项目中账号和密码都是从数据库中查询出来的。所以我们要通过自定义逻辑控制认证逻辑。如果需要自定义逻辑时,只需要实现 UserDetailsService 接口即可。}// 获取所有权限 Collection原创 2022-09-17 22:23:04 · 2828 阅读 · 0 评论 -
@ConfigurationProperties与@Value区别
区别@Value位置类名上属性上功能批量注入属性文件中的属性一个个的指定松散绑定(松散语法)支持不支持SpEL不支持支持JSR303数据校验支持不支持复制类型封装支持不支持。原创 2022-09-12 10:01:41 · 1624 阅读 · 0 评论 -
SpringBoot异常处理——业务逻辑异常
如果controller的方法中捕获到了这种异常,就会走@ExceptionHandler表示的方法arithmeticException(),在方法参数中,可以获取异常对象。新建全局异常类,通过@ControllerAdvice结合@ExceptionHandler。当全局异常处理和局部处理同时存在时,局部生效(就近原则)当访问test的controller方法时,会出现除0异常,就会走异常处理方法,封装异常信息,返回,错误类封装的状态信息。我们发现就近原则生效,异常被局部异常处理器捕获处理。原创 2022-09-12 14:12:51 · 1499 阅读 · 0 评论 -
Cron表达式(转载)
Cron表达式是一个具有时间含义的字符串,字符串以56个空格隔开,分为67个域,格式为。其中是一个域的占位符。最后一个代表年份的域非必须,可省略。单个域有多个取值时,使用半角逗号隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。每个域最多支持一个前导零。说明 如指定2022年每天上午8:15执行任务,Cron表达式可指定为或,而不能指定为。下表为Cron表达式中六个域能够取的值以及支持的特殊字符。Cron表达式中的每个域都支持一定数量的特殊字符,每个特殊字符有其特殊含义。以下为Cron表达式原创 2022-09-12 14:24:36 · 216 阅读 · 0 评论 -
SpringBoot web静态资源映射
我们需要建立自定义配置类,配置类实现WebMvcConfigurer中的addResourceHandlers方法,即可进行自定义资源映射路径的添加// 添加自定义资源映射路径 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) {原创 2022-09-12 17:23:04 · 2540 阅读 · 0 评论 -
Jedis连接池:JedisPool及连接池工具类搭建
JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的,所以首先我们要设置JedisPoolConfig参数。设置完配置之后我们就可以去创建jedis的连接池了,使用的是JedisPoo构造函数。在resources创建jedis.properties配置文件。之后我们就可以通过getJedis获取连接池了。原创 2022-09-14 10:14:02 · 3227 阅读 · 1 评论 -
SpringBean生命周期——refresh源码解读
ApplicationContext没有Bean初始化,依赖注入等功能他都没有,他得简介的调用BeanFactory 来对Bean进行管理,ApplicationContext委托给BeanFactory 来干这些活,ApplicationContext做的是扩展的活,Bean的核心功能是在BeanFactory 中。下面我们深入探究下里面的ResourceEditorRegistrar资源类型转化器,我们可以看到不同的资源类型用不同转化器转化。我们在prepareRefresh();原创 2022-11-01 10:43:11 · 1260 阅读 · 0 评论 -
SpringBean的生命周期——doGetBean函数探究
要点总结dependsOn 时的 bean 初始化顺序dependsOn 用在非显式依赖的 bean 的创建顺序控制@Conditional 的解析时机@Conditional 由 ConditionEvaluator 解析看是否满足装配条件beanName 的解析时机。原创 2022-11-01 10:30:48 · 1446 阅读 · 0 评论 -
Pom文件的依赖与starter启动器的作用
spring-boot-starter-activemq,spring-boot-starter-aop,spring-boot-starter-data-redis,spring-boot-starter-data-solr等。它的父工程为spring-boot-dependencies,看到名字应该想到,是springboot的依赖。所以当子工程导入依赖时,可以不写版本,自动使用父工程规定的版本,以此来进行版本的控制。我们进入POM文件,首先是看到的是Pom文件中的parent。,管理各种依赖的版本。原创 2022-09-09 22:46:08 · 1802 阅读 · 0 评论 -
带你搭一下你的第一个SpringBoot项目
看到大家整理、讲解Springboot的时候,都是已“搭建第一个项目”为开始,俺也来凑凑热闹,好像我还真没总结过,话不多说,开打开打。原创 2022-09-09 22:10:35 · 3317 阅读 · 8 评论 -
场景应用:如何在SpringBoot框架下实现一个定时任务?
Spring给我们提供了可执行定时任务的线程池ThreadPoolTaskScheduler,该线程池提供了多个可以与执行定时任务的方法,如下图。这里我们不需要做Quarze的配置,我们要做的是去继承一个quarze的一个抽象类QuartzJobBean,代表这个是一个Job然后是实现这个抽象类中的方法就是我们具体的工作。创建完一个job后我们是不是要创建一个jobDetail工作明细来绑定我们的工作,再创建一个触发器来绑定工作明细,再由时间调度说明jobDetail和Tigger的关系。...原创 2022-08-26 21:57:42 · 1609 阅读 · 0 评论 -
SpringBean生命周期详解 | 有图有真相
既然叫反转,肯定就有正转,正转其实就是对象去找实例,而反转就反过来了嘛,让实例来找对象;怎么找呢?当然是通过容器啦!原创 2022-08-26 17:27:07 · 9643 阅读 · 2 评论 -
关于 Spring Boot 自动装配你知道多少?
自动装配是springboot的核心,一般提到自动装配就会和springboot联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器,并执行类中定义的各种操作。原创 2022-08-25 13:50:35 · 3675 阅读 · 0 评论 -
图解 Spring 解决循环依赖,学不会接着砍!
此时返回A中,A此时能拿到B的对象顺利完成自己的初始化阶段2、3,最终A也完成了初始化,进去了一级缓存singletonObjects中,而且更加幸运的是,由于B拿到了A的对象引用,所以B现在拿到的的A对象就是完成了初始化的A对象。简单分析上述场景的话,只需要将代理的创建时机放在依赖注入之前即可,但 spring 仍然希望代理的创建时机在 init 之后,只有出现循环依赖时,才会将代理的创建时机提前。方法,追踪源码发现,我们在创建bean的时候,会首先从cache中获取这个bean,这个缓存就是。原创 2022-08-24 20:45:10 · 1409 阅读 · 0 评论 -
Spring Boot 注解
总结了下Spring Boot 的所有注解。原创 2022-08-24 15:55:31 · 1398 阅读 · 0 评论 -
Spring Boot的启动流程
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 创建springbootApplication对象 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - 1. 创建springbootApplication对象springboot容器初始化操作 2. 获取当前应用的启动类型。2.1 :通过判断当前classpath是否加载servlet类,返回servlet web启动方式。原创 2022-08-24 15:00:16 · 24580 阅读 · 9 评论 -
数据库知识复习篇
将这个叶子结点分裂成左右两个叶子结点,左叶子结点包含前 m/2 个(2个)记录,右结点包含剩下的记录,将中间的 key 进位到父结点中。即兄弟结点 key 有富余( > m/2 – 1 ),向兄弟结点借一个记录,同时替换父节点,例如删除 15。若为空树,那么直接创建一个节点,插入 key 即可,此时这个叶子结点也是根结点。即兄弟节点合并成一个新的叶子结点,并删除父结点中的key,将当前结点指向父结点,例如删除 7。聚簇索引:主键值作为索引数据,叶子节点还包含了所有字段数据,索引和数据是存储在一起的。原创 2022-08-07 17:17:17 · 166 阅读 · 0 评论 -
解读 refresh 十二步骤
ApplicationContext没有Bean初始化,依赖注入等功能他都没有,他得简介的调用BeanFactory 来对Bean进行管理,ApplicationContext委托给BeanFactory 来干这些活,ApplicationContext做的是扩展的活,Bean的核心功能是在BeanFactory 中。下面我们深入探究下里面的ResourceEditorRegistrar资源类型转化器,我们可以看到不同的资源类型用不同转化器转化。我们在prepareRefresh();...原创 2022-08-02 23:57:37 · 1510 阅读 · 0 评论 -
Java 封装HTTP返回结果类
Java封装HTTP返回结果类。原创 2022-07-20 00:07:16 · 2139 阅读 · 0 评论 -
HTTP 状态码查询大全
这类状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。这类状态代码表明服务器成功地接受了客户端请求。客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同页面,或通过代理服务器重复该请求。发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。服务器由于遇到错误而不能完成该请求。......原创 2022-07-11 18:36:56 · 2114 阅读 · 0 评论 -
LeetCode 刷题:滑动窗口模板
题目链接:https://leetcode.cn/problems/subarray-product-less-than-k/代码:扩展部分:滑动窗口解题模板第一个模板:适用于需要使用 [变量] 记录的情况模板:例题1:https://leetcode.cn/problems/max-consecutive-ones-iii/第二个模板:适用于需要用 [哈希表] 记录的情况模板:例题1:题目链接:https://leetcode.cn/problems/permutation-in原创 2022-07-08 16:00:00 · 1670 阅读 · 0 评论 -
数据库查询——第几高的数据?
题目Employee 表:+-------------+------+| Column Name | Type |+-------------+------+| id | int || salary | int |+-------------+------+id 是这个表的主键。表的每一行包含员工的工资信息。编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。查询结果如下例所示。原创 2022-07-07 16:30:07 · 1423 阅读 · 0 评论 -
limit 与offset的用法(转载)
在mysql中一般使用limit来实现分页1、LIMIT后面跟一个参数,表示要提取的数量。如 : 指提取前三条数据,类似sqlServer的top语法。2、LIMIT后面跟两个参数时,第一个参数是指第几行,第二个参数是取几条数据。如: 这个SQL是指从第二行的下一行开始向下取3条数据。(即取:3,4,5行的三条数据)3、LIMIT和OFFSET组合使用时,LIMIT后面只能有一个参数,表示要提取的数量,offset后面的数字则表示第几行。如:这个SQL是指从第二行的下一行开始向下取3条数据。(即取:3,4,转载 2022-07-07 15:44:33 · 5464 阅读 · 0 评论 -
Springboot配置返回日期格式化五种方法详解
在yml中添加如下配置:或者OK了,你后端全统一了,应急的同志们就这样就行了,不用学下面的扩展知识,想学习的可以先收藏(建议别收藏,收藏了也不看,要不一口气看完点个赞,要不别收藏来欺骗自己了)系统的知识1.前端时间格式化(不做无情人)前端工程时间格式化方法,实现代码如下。方法调用:但是我们能对前端小姐姐这么残忍吗?????就像下面的前端小姐姐这么可爱,你忍心?????不,我们不能,坚决在后端改!!!!!!使用 SimpleDateFormat 来进行时间格式化,它也是 JDK 8 之前重要的原创 2022-07-03 15:22:54 · 4081 阅读 · 3 评论 -
Springboot 实现热部署的两种方式
在pom.xml中添加下面依赖然后在Settings→Build→Compiler中将Build project automatically勾选上最后按ctrl+shift+alt+/ 选择registy,将compiler.automake.allow.when.app.running勾选。如上,这样就可以实现热部署了。但实际上,org.springframework.boot所实现的功能是快速启动,加上自动编译就能实现所谓的”热部署“了。就代表着自动编译,但这项设定只在debug模式生效,所以要原创 2022-06-26 08:57:29 · 1732 阅读 · 0 评论 -
MySQL复习:数据库与数据表管理
如果使用IF NOT EXISTS关键字,则当指定的数据库名存在时,不创建数据库。如果不使用IF NOT EXISTS关键字,当创建的数据库名存在时,将产生错误。要创建数据库MySQLDB,可以使用下面的语句。1.2 删除数据库DROP DATABASE语句的语法如下:可以在MySQL命令行工具中使用下面语句删除数据库MySQLDB:2 数据表管理2.1 表的概念表是数据库中最重要的逻辑对象,是存储数据的主要对象。在设计数据库结构时,很重要的工作就是设计表的结构。例如,在设计原创 2022-06-16 09:37:39 · 2246 阅读 · 7 评论 -
MySQL复习:数据库和数据表管理
如果使用IF NOT EXISTS关键字,则当指定的数据库名存在时,不创建数据库。如果不使用IF NOT EXISTS关键字,当创建的数据库名存在时,将产生错误。要创建数据库MySQLDB,可以使用下面的语句。1.2 删除数据库DROP DATABASE语句的语法如下:可以在MySQL命令行工具中使用下面语句删除数据库MySQLDB:2 数据表管理2.1 表的概念表是数据库中最重要的逻辑对象,是存储数据的主要对象。在设计数据库结构时,很重要的工作就是设计表的结构。例如,在设计原创 2022-06-16 09:29:34 · 1668 阅读 · 0 评论 -
IDEA连接数据库错误:Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
在Advanced中将设置成即可(直接加在后面)连接成功原创 2022-06-15 14:53:14 · 1387 阅读 · 0 评论 -
Union-Find算法详解
原文地址:https://www.jianshu.com/p/5f0db63ba54b今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。说起这个 Union-Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!后来刷了 LeetCode,并查集相关的算法题目都非常有意思,而且《算法4》给的解法竟然还可以进一步优化,只要加一个微小的修改就可转载 2022-06-01 10:57:36 · 3812 阅读 · 0 评论 -
Uncaught TypeError: Cannot set properties of undefined (setting ‘XXX‘) 报错
this没引入好getLocation(){ let _this = this _this.table= rs.data.table });}原创 2022-05-28 20:57:39 · 16512 阅读 · 0 评论