- 博客(106)
- 资源 (10)
- 收藏
- 关注
原创 任务调度框架
在实际项目中,经常有定时任务的需求,如日终报表,定时爬取数据等,实现此类需求,往往需要调度框架来实现。调度框架按照分布式的维度区分,分为非分布式调度和分布式调度。非分布式调度框架有spring内置的Scheduled;分布式调度框架常见的有QuartZ、XXL-JOB、PowerJob。本文主要介绍Scheduled和XXL-JOB。
2025-06-11 11:59:04
815
原创 分布式ID
在复杂的分布式项目中,往往需要对大量的数据或消息进行唯一标识,分布式ID能快速唯一的定位一条消息或数据。分布式ID实现方案有很多,下面简要介绍和比较几种实现方式:1、依赖数据库自增生成:利用MySQL的自增列或Oracle的序列等功能。缺点:在分布式分库分表场景下无法保证ID全局唯一。2、时间戳:ID采用时间戳生成。缺点:在高并发多实例服务场景下(相同的毫秒数生成的ID一样)无法保证ID全局唯一。3、UUID:能保证在高并发多实例服务场景下ID全局唯一。
2025-06-10 10:33:51
753
1
原创 分布式锁-Redisson实现
在分布式环境下,分布式锁可以保证在多个节点上的并发操作时数据的一致性和互斥性。分布式锁有多种实现方案,最常用的两种方案是:zookeeper和redis,本文介绍redis实现分布式锁方案。
2025-06-06 15:25:22
877
原创 spring-boot-admin实现对微服务监控
以blog-user服务为例,此服务添加了actuator的支持。5、启动blog-actuator服务并页面测试服务监控情况。1、添加spring-boot-admin和nacos依赖。2、监控应用启动类注解@EnableAdminServer。3、配置应用信息(服务注册到nacos中)4、启动其他微服务及开启actuator。
2025-06-03 16:26:31
350
原创 配置管理Nacos
Nacos 配置中心支持动态配置更新,无需重启应用,从而使得应用不间断运行。kill掉sentinel-dashboard-1.8.8.jar进程后,重新启动sentinel-dashboard和项目后,流控规则仍然继续生效,不需要重复配置sentinel规则。1、统一管理:对应微服务项目,每个服务都有独立的配置信息,Nacos 配置中心可以集中配置所有服务,提供统一的配置界面和API来进行配置的增删改查。3、支持多环境配置:项目在不同的环境应用程序的配置不同,Nacos 配置中心支持多环境配置管理。
2025-06-03 12:03:50
1031
原创 微服务-Sentinel
Sentinel 控制台是一个独立应用,用于可视化的监控和管理,它可以直接运行可执行的jar,项目使用的jar版本是:sentinel-dashboard-1.8.8,直接运行:java -jar sentinel-dashboard-1.8.8.jar。在高并发的场景下,由于A服务不可用,导致B调用A一直等待,迟迟不能释放资源,进而导致B服务不可用,进而导致CD服务不可用,最终整个项目服务不可用,产生了服务崩塌。针对来源:针对特定的调用方进行限流。例如,服务A调用服务B时,可以针对服务A的调用进行限流。
2025-06-02 11:41:37
1219
原创 网关Gateway
在微服务项目中,没有引入网关时,项目架构如下:引入网关后,架构如下:引入网关后,有如下优势:1、客户端请求经过网关向后台统一分发请求,后台微服务的增加、减少对客户端影响较小2、客户端请求到每个后台微服务,可以经过网关实现统一的鉴权认证3、网关可以对后台微服务做限流管理。
2025-05-29 15:09:43
899
原创 OpenFeign
3、【blog-api】提供feign接口,其中blog-content 是注册到nacos中的服务名,接口名和参数保持和【blog-content】实现类一致。项目版本用的负载均衡是loadbalancer,在【blog-user】调用openFeign接口时,默认的均衡策略时【轮询】blog-api:对外公布的服务接口,主要是blog-content接口,接口包括:dto和服务接口。blog-user:博客作者模块,通过 blog-api模块远程调用blog-content服务。
2025-05-28 12:12:28
274
原创 服务发现Nacos
1、Namespace :Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。2、GROUP:Nacos可以按照group分组的维度管理服务3、集群:多个服务示例可以放在一个集群中。
2025-05-27 16:48:10
830
原创 Spring Cloud 及Spring Cloud Alibaba 简介
Spring Cloud Alibaba是Spring Cloud的子项目,提供了 微服务开发的一站式解决方案,它符合Spring Cloud标准,是阿里提供的微服务解决方案。Spring Cloud Alibaba提供了一系列功能组件,具体包括:1、服务限流降级:Sentinel2、服务发现与注册:Nacos3、事件驱动:Spring Cloud Stream RocketMQ4、分布式事务:Seata。
2025-05-27 11:35:13
389
原创 Spring boot基础
Spring boot 是完成应用快速开发的脚手架工具,能够快速搭建独立的Spring 应用程序。本文从3个方面介绍Spring boot:快速搭建Spring boot应用、。
2025-05-26 15:14:13
455
原创 单体架构VS微服务架构
微服务架构:多个服务,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。每个服务独立部署,服务可用不同的语言开发,使用不同的数据存储技术。如上示意图,前台页面部署在nginx中,通过后台网关负载均衡调用不同的模块服务,每个服务为了高可用都是集群部署,并且服务注册在配置服务器中。如上示意图,应用前端页面,后台所有模块功能都放在一个应用程序中,并部署在一台服务器上。单体架构:一个包含有所有功能的应用程序。
2024-10-23 17:56:52
535
原创 SpringBoot中yml文件多环境配置
项目打好包后,通过>java -jar 项目.jar --spring.profiles.active=test运行项目并手工指定test环境信息,运行结果就是test环境,2、通过主配置文件application.yml中的spring.profiles.active=xxx指定具体的环境。从运行结果看出,项目运行的配置是dev环境。
2024-10-21 14:57:27
458
原创 JMeter模拟并发请求
方式三,并发请求多少,堆内存中生成多少个TicketController实例,并且每个TicketController实例各自持有TICKET_AMOUNT,访问各自的成员属性也就不会发生数据不一致问题。方式一、二,堆内存中只有一个TicketController实例,并且TICKET_AMOUNT不属于实例对象,属于共享的数据区,对这种共享数据并发操作时,需要锁机制控制,防止出现数据不一致。从运行结果可以看出,在高并发的时候,没有出现超卖或数据不一致问题,数据结果符合预期。
2024-10-19 14:38:08
790
原创 分布式介绍
CAP理论是分布式架构中提出来的一种设计思想模型,全称是由Consistency、Availability、Partition Tolerance三个词组成。CAP理论的核心思想是,一个分布式系统最多只能同时满足C、A、P特性中的两个,而网络分区是不可避免的,因而只能在CP或AP做出选择。
2024-10-19 10:21:34
330
原创 ThreadLocal源码详解
从示意图可以看出,红色实线部分是强引用,黑色虚线部分是弱引用,当gc时,如果ThreadLocal没有被外部强引用,会将ThreadLocal对象回收掉,会导致ThreadLocalMap的Key为null,key=null对应的value,被线程对象Thread强引用,如果线程迟迟不结束,那些value的这块内存永远无法访问,也无法回收,发送了内存泄漏。解开注释:studentThreadLocal.remove();如果泄漏的数据量足够大,可能会引起内存溢出,导致程序异常结束。
2024-10-17 21:40:17
1099
原创 线程池核心参数介绍
说明:手工创建了一个线程池,核心线程数10,最大线程数20,任务队列100,使用默认的线程工厂生成线程,拒绝策略选择AbortPolicy。核心线程数(参数传递),最大线程数Integer.MAX_VALUE,任务队列采用延迟队列DelayedWorkQueue。核心线程数0,最大线程数Integer.MAX_VALUE,任务队列采用同步队列SynchronousQueue。SynchronousQueue:同步队列,即任务到来时,不放入队列等待,直接交给工作线程执行任务。
2024-10-14 16:11:01
1011
原创 基于MP提供的dynamic-datasource实现多数据源
项目遇到的多数据源场景:通过Flink CDC采集某个数据源变化数据(主表数据),变化数据(主表数据) + 源数据源的变化数据的辅表数据 + 映射转换程序计算得到最终结果数据,并将最终的结果落库保存在另外一个数据源中,上述的需求中就需要2个数据源,源数据源查询数据,目标数据源更新数据。配置了2个数据源,master数据源(目标数据源,负责计算结果的写入),slave数据源(源数据源,负责源数据的查询)TestServiceImpl的逻辑模拟了2个数据源的操作,源数据源读取数据,目标数据源更新数据。
2024-10-11 16:00:20
511
原创 SpringBoot集成Kafka
Kafka 是一个分布式的基于发布/订阅模式的消息队列,它最大的特性是可以实时的处理大数据量以满足各种需求场景。
2024-10-10 21:39:27
947
原创 JAVA基础面试题汇总(持续更新)
3)JVM通过执行引擎(Execution Engine)将字节码翻译成底层系统识别的指令再交由CPU 去执行,此过程中需要调用其他语言的接口本地库接口(Native Interface) 来实现整个程序的功能。在Java中,每个对象都有一个与之关联的哈希码(hash code),这是通过对象的内部状态计算出来的一个整数值,用于在哈希表等数据结构中进行快速查找。如果对象student放入hash表中,如HashMap,通过hashCode()方法的值可以快速的从Map中获取对象的位置,实现快速检索。
2024-10-06 12:51:45
1167
原创 有状态(Session) VS 无状态(Token)
上图中,浏览器客户端请求后台数据时,携带了token信息,nginx负载均衡到tomcat服务器上,服务器通过解密token,判断用户的请求是否有效(用户是否登录,是否过期,token是否伪造),对真实有效的token,服务端接受客户端请求并返回数据到客户端。Header:头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等,如{"type":"JWT","alg":"HS256"},Base64 加密header后的字符串为(去中心化(有状态下session集中存放Redis)
2024-10-04 19:10:39
1689
原创 SpringBoot介绍及整合Mybatis Plus
SpringBoot通过自动配置、默认配置可以简化配置过程;3、统一的异常处理(GenericExceptionHandler、BusinessExceptionCode、BusinessException)1、自动配置、默认配置:SpringBoot提供自动配置功能,根据项目的依赖和环境自动设置Spring应用程序,减少了手动配置的复杂度。4、健康检查、监控:SpringBoot提供健康检查、应用监控、日志管理等。4、实体、dto、Mapper接口、mapper.xml。1、增加依赖【pom.xml】
2024-10-03 15:28:51
1256
原创 Redis介绍及整合Spring
Redis是内存数据库,Key-value型NOSQL数据库,项目上经常将一些不经常变化并且反复查询的数据放入Redis缓存,由于数据放在内存中,所以查询、维护的速度远远快于硬盘方式操作数据(关系型数据库)。Redis的数据存储在内存中,同时也会持久化到硬盘中,极端情况Redis服务器宕机时,缓存数据也可以从硬盘中恢复。Redis的常用配置(配置文件redis.conf)如下:daemonize yes 设置 Redis 以守护进程方式运行,启动后台运行。
2024-10-01 21:51:51
958
原创 Spring Task 调度任务
从运行结果可以看出,spring启动后,程序每隔5秒钟定时执行了test方法。cron表达式是一种用于设置定时任务的语法规则。它由6个字段组成,分别表示。定时任务类:ScheduleTaskTest,系统每隔5秒钟执行一次test方法。
2024-09-30 15:08:38
608
1
原创 Spring整合Mybatis Plus
Dto类:对于复杂查询的sql结果,根据查询的结果集字段新建一个dto类,下方的StudentDto对于下方mapper.xml文件中的resultType="com.text.entity.StudentDto":spring-context是spring的核心、AOP需要aspectjweaver支持,事务管理器需要spring-jdbc,mybatis-plus框架,druid是数据源。从运行结果可以看出,分页查询时,先查询了总记录数,再查询了分页的数据。1、增加项目依赖【pom.xml】
2024-09-30 10:53:04
1786
原创 Spring整合Mybatis
spring-context是spring的核心、AOP需要aspectjweaver支持,事务管理器需要spring-jdbc,mybatis-spring 是spring整合mybatis的核心,druid是数据源。2、spring和mybatis配置文件配置【applicationContext.xml、mybatis-config.xml】4、服务接口及实现【StudentService.java、StudentServiceImpl.java】1、增加项目依赖【pom.xml】
2024-09-29 21:13:20
860
原创 Spring MVC 常用注解
GetMapping 绑定GET请求,注解作用在方法上@PostMapping 绑定Post请求,注解作用在方法上@RequestMapping 通用注解,通常用在Controller上,用于请求URL的前缀@Controller 控制器类,作用在类上,@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面@ResponseBody 作用在方法上,标识返回实体对象,使用此注解后,方法返回的数据会直接写入HTTP响应体中。。
2024-09-29 16:01:44
889
原创 Mybatis-Mapper接口方式
Mybatis框架在配置方式的情况下,对数据库的CRUD操作直接通过SqlSession对象来操作,常用的方法有select、insert、update、delete等方法,在这些方法的参数中,需要准确的写明对应xml文件的namespace+方法,参考下图的代码方式: mybatis接口方式(推荐方式)实现数据库的CRUD操作,采用接口方式开发,根据接口里面的方法实现数据库的操作,基于这种方式实现,需要如下约定: mybatis Mapper接口方式实现数据库操作有如下步骤1、
2024-09-29 12:11:25
496
原创 Spring JDBC及声明式事务
Spring JDBC 封装了原生的JDBC API,使得处理关系型数据库更加简单。Spring JDBC的核心是JdbcTemplate,里面封装了大量数据库CRUD的操作。使用Spring JDBC有如下步骤:1、pom增加依赖spring-context是spring的核心,负责容器中对象实例创建;spring-jdbc是对原生jdbc的封装;logback-classic主要为了数据库操作时辅助信息的日志输出。2、IOC容器实例化数据源对象dataSource和JdbcTemplate对象。
2024-09-26 08:22:34
1149
原创 Spring AOP实现原理-动态代理
AOP是基于实现切点方法的动态扩展。当切点目标类实现了接口,AOP通过JDK自带的动态代理扩展被代理对象方法的功能;当切点目标类未实现接口,Spring 通过CGLib组件实现扩展被代理对象方法功能。代理模式的核心是创建一个代理对象,代理对象内部包含封装了被代理对象,最终通过执行被代理对象的方法达到动态扩展方法的功能,代理模式分为静态代理和动态代理。
2024-09-23 21:48:03
1065
原创 Spring AOP - 注解方式实现
3、增加切面类(开启切面注解@EnableAspectJAutoProxy、增加切面标识@Aspect)及通知方法(环绕通知@Around,并配置节点表达式execution)2、配置文件增加注解扫描的包(applicationContext.xml)前文已经讨论了基于配置文件方式实现Spring AOP(),本文采用注解的方式实现前文相同的功能。1、项目增加aop依赖(pom.xml)4、业务方法StudentDaoImpl。5、测试类Application。
2024-09-23 15:41:46
447
原创 Spring IOC容器Bean对象管理-Java Config方式
【代码】Spring IOC容器Bean对象管理-Java Config方式。
2024-09-19 21:30:13
532
原创 Spring IOC容器Bean对象管理-注解方式
Resource 注解StudentServiceImpl 后,先从容器中找bean名称=studentDao的对象,没找到(系统中实例对象名称是studentDaoImpl)再通过类型StudentDao寻找,找到studentDaoImpl,注入studentServiceImpl对象的studentDao属性中,1、applicationContext.xml加入扫描的包,此包项下的类被IOC容器扫描,如有注解,则实例化对象。配置文件config.properties(示例jdbc连接)
2024-09-19 10:23:34
738
原创 IOC容器Bean的Scope及生命周期
1、容器Bean的Scope范围spring容器在非WEB环境下bean的范围包括prototype(多例)、singleton(单例)2种,单例会存在线程安全问题,多例则没有此问题。
2024-09-18 08:34:21
458
原创 Spring-IOC容器-ApplicationContext
Inversion of Control 控制反转,是一种设计原则,spring 中通过DI(dependency Injection)来具体实现。比如原本对象的实例化,是通过程序主动New出来,IOC中的对象实例交给Spring框架来实例化,程序使用时直接通过spring获取即可。
2024-09-16 15:56:00
699
原创 Mybatis批量操作
当1次插入的数据量过大,如100万,受限于网络包大小限制或者有些数据库有最大接受包的限制(如mysql 中max_allowed_packet 参数限制,默认值为4M),会出现如下sql异常:com.mysql.jdbc.PacketTooBigException。上述程序执行后,后台只会发送1条sql语句:INSERT INTO your_table (column1, column2, ...) VALUES(column1, column2, ...),(...)示例:批量insert多条语句。
2024-09-13 13:54:52
2352
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人