![](https://img-blog.csdnimg.cn/2019090314000010.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spring Boot
文章平均质量分 74
springboot学习
weihubeats
开源框架Tlog贡献者,技术大多都源于生产实践,乐于分享.公众号:小奏技术
展开
-
spring ai很好,但我现在还不推荐你线上使用
这里是小奏,觉得文章不错可以关注公众号小奏技术原创 2024-04-29 09:30:00 · 691 阅读 · 0 评论 -
基于Javassist字节码增强实现本地公参传递
这里是,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。原创 2024-01-30 21:04:19 · 406 阅读 · 0 评论 -
spring data Redis整合spring cache实战(附源码及源码分析)
这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党。原创 2023-12-06 09:58:17 · 509 阅读 · 0 评论 -
Spring boot ResourceUtils.getFile本地获取文件成功,jar获取失败问题处理
在想要读取文件的时候使用了如下方式。原创 2023-03-21 10:17:12 · 659 阅读 · 0 评论 -
Spring 自己实现一个自定义Bean注解注册器来惊艳面试官
文章目录背景Spring内置扫描器实战自定义Bean注解自定义 注解扫描器自定义Bean注册处理器测试单Bean注入依赖注入接口注入运行结果参考觉得文章不错欢迎关注公众号:小奏技术背景我们都知道在我们最开始使用spring定义Bean的时候有如下方式<bean id="testBean" class="com.zou.TestBean"/>如果Bean多了我们不可能一个一个Bean标签去定义,就有了基于包去扫描<context:component-scan base-packa原创 2022-01-20 10:15:18 · 968 阅读 · 0 评论 -
Spring Boot Apollo监听namespace并更新配置Bean(附源码)
这里是weihubeats,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。原创 2023-01-14 11:55:26 · 922 阅读 · 0 评论 -
从0到1图文教你如何将spring boot项目部署到minikube中去
这里是weihubeats,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。原创 2022-11-19 09:55:24 · 862 阅读 · 2 评论 -
spring boot 自定义配置文件并提示及NestedConfigurationProperty注解作用
我们在使用spring 提供的一些jar在中写配置都会有如下提示但是如果自定义配置是没有提示要,要实现该功能很简单。原创 2022-11-14 20:07:00 · 708 阅读 · 0 评论 -
Spring Boot 中 Apollo读取Map<String,List<String>>、List
list的读取和配置还是非常简单的。不通值用逗号分割就可以了。map的的读取有些特殊。原创 2022-09-20 10:23:46 · 1237 阅读 · 0 评论 -
分布式限流不会用?一个注解简单搞定
Limiter@Target({/*** 限流器的 key*/*** 限制数量** @return 许可数量/*** 速率时间间隔** @return 速率时间间隔/*** 时间单位** @return 时间}原创 2022-09-18 17:05:41 · 545 阅读 · 0 评论 -
国际化(i18)不知道怎么做?来看看利用Spring Boot如何优雅实现
实际我们有时候前端可能会通过自定义个参数传入语言环境,所以我们也可以自定义参数来设置语言环境,比如我们通过param的lang值来设置这里我们需要添加配置// 设置默认环境 slr . setDefaultLocale(Locale . SIMPLIFIED_CHINESE);} }这里我们设置默认的环境为zh我们再重试试试传入参数lang = en试试可以看到成功了。原创 2022-08-21 10:15:00 · 1934 阅读 · 0 评论 -
Spring Boot layered(分层) jar 构建docker镜像
如果我们仔细看上面的会发现依赖不会在构建的时候共享,所以我们需要自定义配置调整下在Spring Boot中我们可以通过配置文件来调优自定义分层我们建立一个layers.xml原创 2022-08-18 09:45:00 · 1247 阅读 · 0 评论 -
如何构建spring boot maven骨架自动生成项目
随着公司项目越来越多,每次自己去搭建项目都会显得非常繁琐,而且对应一些打包相关的插件也会弄错,特别是多模块项目搭建更是麻烦,所以想定义一套统一的maven 骨架每次自动生成项目目标首先我们创建一个模板项目,或者基于已有的项目。目前我的目标项目结构大致如下:在项目根路径生成Archetype,执行如下命令如果是idea可以直接在idea 的Terminal输入如果出现如下报错可以参考这里解决执行命令成功后就会在编译文件夹target看到如下文件我们新建一个模板项目,项目结构随便。然后将刚才targe原创 2022-06-30 14:48:43 · 702 阅读 · 0 评论 -
深入研究下Spring Boot Actuator 在kubernetes中探针的应用
不管什么样的场景,我们应用基本上都需要提供一个探针,判断应用是否存活,来监控应用是否存活,是否需要剔除服务,是否需要自动重启在不使用三方插件我们最简单的方式就是自己写个接口供外部调用去做类似心跳探测Spring Boot Actuator实际上已经给我们提供了相应的组件。启动endpoint监控我们可以使用如下配置开启所有的接口(endpoint)监控也可以开启指定接口(endpoint)的监控默认的接口前缀都是开头,如果我们要自定义可以使用如下配置spring boot 为我们提供了如原创 2022-06-27 08:19:42 · 2318 阅读 · 0 评论 -
Spring Boot 版本升级2.6.8 PageHelper 报错 The dependencies of some of the beans in the application context
Spring Boot 版本由 升级到 ,然后启动发现报错解决看错误消息很明显就是出现了循环依赖,然后发现 2.6以上的版本默认是禁用循环依赖的。所以解决方式有两种升级 版本可以看到 官方新版本是解决了这个bug的,所以我们升级 到最新版本就行了...原创 2022-06-20 18:45:17 · 931 阅读 · 1 评论 -
简单聊聊spring boot自研sdk版本兼容问题如何解决
背景最近在团队内部写了一个简单的基于spring boot的sdk,我这边使用的spring boot版本为2.4.2。然后在sdk稳定上线后其他项目也想使用,在使用中发现引入sdk后起不来。报错这里可以看到报错信息也很明显就是AnnotationUtils.isCandidateClass()方法不存在,而方法AnnotationUtils.isCandidateClass又是我直接使用了 spring boot的工具类如果以sdk这边的spring boot版本来说是存在这个方法的,但是实际原创 2022-05-29 22:50:50 · 1140 阅读 · 1 评论 -
深入聊聊Spring Boot 优雅停机
Spring Shutdown Hook 一共做了5件事:发布Spring应用上下文的关闭事件,让监听器们有机会在应用关闭之前做出一些响应执行lifecycleProcessor的关闭方法,让Lifecycle们有机会在应用关闭之前做出一些响应销毁IOC容器里所有单例Bean关闭BeanFactory执行勾子函数,子类实现后做各自的资源清理,比如ServletWebServerApplicationContext会实现该勾子函数关闭内嵌的WebServer(Tomcat)——————......原创 2022-05-27 09:48:23 · 2368 阅读 · 0 评论 -
简单聊聊xxl-job自定义监控这件小事
文章目录背景解决方式自定义AOP异常切面AOP实现的缺点硬核修改源码这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党背景线上的xxl-job时常有定时任务执行失败,但是我们这边时常没有感知到,只有当业务方过来告诉我们的时候我们才能后知后觉,非常的不及时。所以希望xxl-job能有一个合适的监控方式。其实开源版本的xxl-job是有提供邮件报警的但是遗憾的是团队的开发大多不会及时看邮件。我们更希望有像微信、钉钉、飞书这种直接群报警这种通知,所以就需原创 2022-05-12 23:01:53 · 2156 阅读 · 0 评论 -
图文Debug深入研究下Spring Boot 事件发布监听源码
文章目录Spring Boot 版本使用测试源码分析事件发布监听器的获取事件注册总结这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党Spring Boot 版本2.6使用定义事件public class ZouEvent extends ApplicationEvent { @Getter private final String msg ; public ZouEvent(Object source, S原创 2022-04-24 21:50:58 · 270 阅读 · 0 评论 -
从源码角度Debug一步一步分析Spring MVC一次接口调用的过程
文章目录源码版本测试demo主要目标源码分析doDispatch获取HandlerExecutionChain对象RequestMappingHandlerMappingAbstractHandlerMappingAbstractHandlerMethodMapping lookupHandlerMethod方法方法执行总结这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党源码版本spring-web:5.3.7测试demo@RestControl原创 2022-03-20 20:38:33 · 1258 阅读 · 1 评论 -
Spring Boot 自动装配之Web容器自动装配(Tomcat、Jetty、Undertow)
背景最近要做一些Web容器(Tomcat、Jetty、Undertow)相关的线程池监听以及动态配置,所以借此机会就研究了一下Spring Boot Web容器的自动装配过程Spring Boot 版本2.4.2入口熟悉Spring Boot Spi机制的同学就不会知道Spring Boot 自动装配的起点spring.factories这个文件可以看到装配了一个ServletWebServerFactoryAutoConfiguration类ServletWebServerFactor原创 2022-03-04 23:05:14 · 833 阅读 · 0 评论 -
想写Spring Boot SDK?先深入学习下@Import 注解吧
文章目录背景@Import 作用作用对象直接注入注入 @Configuration 类导入实现 ImportBeanDefinitionRegistrar接口的类导入实现ImportSelector 接口的类背景最近在写Spring Boot 相关的sdk,有这么一个需求,就是在某个Bean存在的时候才注入或者开启某个配置,最简单的例子就是我们需要项目配置了Redission才启动分布式锁相关的AOP切面配置,那么如何实现呢,最简单的方式使用使用@ConditionalOnBean 注解,但是发现@Co原创 2021-12-24 10:00:00 · 869 阅读 · 0 评论 -
闲来无事手撸了一个简单的MybatisPlus读写分离注解
文章目录背景定义数据源常量名定义注解WHDSWHReadWHWrite设置数据源切换工具类基于抽象类DynamicRoutingDataSource选择数据源基于AOP拦截注解设置数据源(基于MethodInterceptor接口)配置MybatisPlus使用关于我背景最近项目要做读写分离,然后看了下没什么好的开源框架,开源框架因为要兼顾太多的东西,所以显的很笨重,不够轻量,而我的目的很简单,就是提供一个注解,动态的切换数据源。所以看了下https://github.com/baomidou/dyna原创 2021-12-14 08:30:00 · 915 阅读 · 0 评论 -
Spring Boot @EnableConfigurationProperties、@ConfigurationProperties 注解作用及源码分析
文章目录先谈`@ConfigurationProperties` 注解@EnableConfigurationProperties 注解使用示例源码分析`EnableConfigurationProperties` 源码@ConfigurationProperties 源码关于我先谈@ConfigurationProperties 注解@ConfigurationProperties 注解主要用于将配置文件properties或 yml 中的属性转换到Bean中的属性比如像下面这样propert原创 2021-11-29 08:45:00 · 786 阅读 · 0 评论 -
基于Spring Boot我开源了一个简单的MQ幂等框架(支持主流的MQ客户端)
文章目录背景设计思路具体实现定义一个幂等注解定义一个AOP切面使用项目源码地址不足背景目前项目中RocketMQ应用场景还是比较多的,但是线上经常因为一些异常原因导致生产者重新投递消息导致消费者消费重新消费,为此每次需要手动处理消费幂等,觉得比较繁琐,所以就想了写一个通用的自动幂等框架设计思路开始是想着借用Redis或Mysql作去重幂等校验,大致思路如下大致流程如下,其中加锁部分在redis就直接使用redis的分布式锁即可,在Mysql中加锁可以基于for update来实现最开始的实现是原创 2021-11-14 11:00:07 · 1436 阅读 · 3 评论 -
深入理解SpringBoot 条件注解
文章目录SpringBoot的条件注解实现原理@Conditional 原理解析条件注解解析类(类似OnJavaCondition)到底怎么自动加载的springboot版本: 2.6.0-SNAPSHOT 紧随官网最新稳定版本SpringBoot中有一个很重要的模块,那就是spring-boot-autoconfigure。可以说我们所有的三方依赖的自动配置AutoConfiguration(自动化配置类),比如KafkaAutoConfiguration、GsonAutoConfiguratio原创 2021-10-27 15:48:38 · 1259 阅读 · 0 评论 -
如何在开源项目提交自己的pr(我在开源项目提交的第一个被合并的PR,附带彩蛋)
文章目录背景使用发现bug解决方式开源项目提交PR的标准流程1. fork项目到自己仓库2. 将自己的远程仓库和fork的源仓库建立连接3. 提交一个issues4. 本地开发提交5. 提交PR彩蛋背景最近项目要弄一个分布式链路追踪,然后传统的一些方案非常的重,不太适合,最终看上了Tlog这款开源框架非常的轻量可以看到对于分布式链路追踪只是生成一个全链路id,还是比较方便。具体使用不是本文的重点。这里想要了解使用的推荐大家去看官方官方文档地址github开源地址github start还是原创 2021-10-20 08:59:01 · 1108 阅读 · 0 评论 -
SpringCache + Caffeine + Redis整合本地缓存为分布式缓存
文章目录背景Caffeine 简介相对于Guava Cache优化点整合缓存配置缓存使用自定义缓存删除注解reids 事件监听删除缓存测试测试类测试结果总结源码下载背景为什么我们明明有了分布式缓存redis,还要将本地缓存多此一举整合为分布式缓存呢。原因很简单,性能。不管redis多块,都需要网络请求,io耗时,如果使用本地缓存基本没有耗时。Caffeine 简介官方文档Caffeine 是基于 JAVA 8 的高性能缓存库。并且在 spring5 (springboo 2.x) 后,spring原创 2021-09-09 22:52:28 · 6643 阅读 · 5 评论 -
SpringBoot fastjson自定义注解时间转时间戳
spirngboot 中有时候需要将时间类型比如 LocalDateTime、Date 返回给前端,但是一般会和前端约定好转换为时间戳给前端。正常来说使用全局配置,统一转换,比如重写一个DateConverter@Componentpublic class DateConverter implements Converter<String, Date> { private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";原创 2021-08-04 09:44:56 · 2548 阅读 · 0 评论 -
Springboot 打包jar并上传私服maven(Nexus3),下载使用
最近要写一个基于springboot的三方sdk,供其他项目使用,所以需要了解怎么将springboot打包成 jar,并上传到私服,然后下载使用打包上传配置Maven settings.xml<servers> <server> <id>cider</id> <username>cider</username> <password>123</password&.原创 2021-06-12 14:50:56 · 1649 阅读 · 1 评论 -
Springboot(HandlerMethodReturnValueHandler使用) 自定义注解处理返回值
在我们开发接口的时候我想到大多数接口都需要返回如下格式{ "code": "200", "data":"", "msg": "success"}大多人的做法其实很简单,但是也很冗余开发一个 ResponseResult,然后返回对象用这个对象包起来,大概长这么个样子 @GetMapping("/test") public ResponseResult test() { List<Student> students; ResponseUtils原创 2021-06-01 20:46:41 · 2680 阅读 · 10 评论 -
Springboot+MybatisPlus+Druid整合ClickHouse(附源码)
核心依赖<properties> <java.version>1.8</java.version> <mybatis-plus.version>3.3.0</mybatis-plus.version> <druid.version>1.1.18</druid.version> <clikchouse>0.2.4</clikchouse>原创 2021-05-21 14:08:53 · 2345 阅读 · 0 评论 -
SpringBoot spi
java 有自己的spi,dubbo也有自己的spi,Spring也有自己的spi,而springboot就用到了spirng的spi来实现自动装配。我们用过springboot的都知道,在SpringBoot中我们需要添加任何一个配置类都只需要添加一个配置类,比如@Configurationpublic class SpiTestConfig { public SpiTestConfig() { System.out.println("test config init!")原创 2021-04-24 15:03:45 · 3858 阅读 · 0 评论 -
Springboot 中@ConditionalOnProperty的妙用,指定接口实现
在原生java中就有spi来为我们接口作扩展通过配置文件去指定实现类来灵活编码,而不乏很多开源框架对java的spi 作了增强,比如dubbo。具体duboo的spi增强了什么大家可以去dubbo官网参考这里不作展开说明来说说我们今天的目标:需求: 因为我们项目可能需要切换数据库,但是为了平滑切换,准备了这两个数据源Mapper,希望有什么问题可以通过配置文件马上回滚到原先的数据源。比如原先的mapper是查询的mysql,新的数据源是查询的postgresql。我们想先切换为postgresql去做改原创 2021-03-19 17:52:16 · 3594 阅读 · 5 评论 -
SpringCloud Fegin 三方接口统一出参(统一验签)
在调用三方接口的时候我们为了接口安全一般会验签,比如调用所有三方接口都需要添加额外参数比如?signature=[signature]&key=[key]×tamp=[timestamp]这样会使用我们的接口调用参数显得冗余,且维护困难,在使用 Fegin 做第三方接口调用时,我们可以基于Fegin 开放的RequestInterceptor扩展接口来实现统一出参public class FeignInterceptor implements RequestInterce原创 2021-03-02 18:05:40 · 1512 阅读 · 0 评论 -
SpringBoot+Apollo配置动态线程池
文章目录前言实现核心依赖配置文件实现代码前言尽管我们经过谨慎的评估,仍然不能够保证一次计算出来来的线程池参数是合适的,那么我们是否可以将修改线程池参数的成本降下来,这样至少可以发生故障的时候可以快速调整从而缩短故障恢复的时间呢?基于这个思考,我们是否可以将线程池的参数从代码中迁移到分布式配置中心上,实现线程池参数可动态配置和即时生效,线程池参数动态化前后的参数修改流程对比如下实现分布式配置中心这里使用的是Apollo核心依赖 <dependency> &l原创 2021-02-08 08:48:50 · 4786 阅读 · 0 评论 -
Springboot 整合MybatisPlus 多数据源(分包实现)
文章目录实现方式核心依赖核心配置文件MybatisPlus配置类MybatisPlusConfigMybatisPlusConfig1启动类配置分包实现方式上次基于AOP动态切换数据源实现,这次实现使用分包实现核心依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</arti原创 2021-01-13 20:01:55 · 1127 阅读 · 0 评论 -
Springboot+Mybatis+Druid整合ClickHouse
文章目录核心依赖配置类测试核心依赖<!--MyBatis 及 插件依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </d原创 2020-12-11 14:08:33 · 11084 阅读 · 0 评论 -
MybatisPlus 实现 where id = and (a = or b = )
##实现LambdaQueryWrapper<CustomerLabelMapping> wrapper = Wrappers.lambdaQuery(); String approval = labelQuery.getApproval(); String companyName = labelQuery.getCompanyName(); String drugId = labelQuery.getDrugId(); wrap原创 2020-12-02 09:55:16 · 1098 阅读 · 0 评论 -
SpringBoot AOP 自定义参数转换
文章目录目标自定义注解AOP实现使用目标有时候会有一些常用入参转换和出参转换需求,比如数据库存入的参数与页面不同,在请求参数去数据库查询时需要作一层参数转换,而返回给前端也需要作参数转换,为了不将这种常用冗余代码重复写入,希望自定义注解实现自动转换。下面代码仅供参考自定义注解/** * @author : wh * @date : 2020/10/28 14:15 * @description: 参数转换 */@Documented@Target(ElementType.METHOD)原创 2020-11-18 08:17:13 · 1630 阅读 · 0 评论