后端Java框架
文章平均质量分 54
AlbenXie
这个作者很懒,什么都没留下…
展开
-
MSE 支持 Apache Shenyu 网关实现全链路灰度
我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。比如在上图中,以 RocketMQ 为例,C 应用生产消息,A 应用消费消息,那么如何做到 C 应用的 gray 节点的消息,只能被 A 应用的 gray 节点消费。在发布过程中,我们只需部署服务的灰度版本,流量在调用链路上流转时,由流经的网关、各个中间件以及各个微服务来识别灰度流量,并动态转发至对应服务的灰度版本。转载 2023-02-21 21:16:43 · 301 阅读 · 0 评论 -
利用阿里云的MSE,上一个真正的灰度发布方案
如果路由线上版本,返回:device.v1111 -> charge.v1111 --> order.v1111 --> base.v1111 (userId: xxx)如果路由灰度版本,返回:device.v1111 -> charge.v2222 --> order.v2222 --> base.v1111 (userId: xxx)例如桩服务中设置mse-deviceCode,网关服务设置mse-userId, mse-userName, mse-ipAddress等。转载 2023-02-21 17:23:44 · 632 阅读 · 0 评论 -
系统设计系列之如何设计一个短链服务
短链服务其实比较简单,没有太多的业务逻辑,主要考察对于分布式系统常用设计的理解,也是经常被用在面试过程中的一道题。这里只是提供大家一些设计思路,文中涉及到的发号器(分布式ID)、布隆过滤器、MurmurHash等都没有太过深入,因为每一个都不是三言两语可以说明白的,需要大家自行解决了。转载 2023-02-06 14:05:20 · 486 阅读 · 0 评论 -
java 实现 生成短链接服务
现在常用的还是第二种,用自增的发号器生成对应的短链接。生产环境要用,可以用数据库的自增id来发号,或者分布式下生成id用类似雪花算法来发号。同时,避免原始链接重复,可做重复判断,可用布隆过滤器或redis长链接和短链接的对应关系,可保存在数据库,也可保存在类似redis中,顺带还可以设置过期时间。也有开源的生成短链接的,比如yourls,PHP实现,安装只需要装PHP和mysql即可。转载 2023-02-03 16:46:53 · 1836 阅读 · 0 评论 -
Nacos 集群部署3
这里只是测试,使用的单机版nginx为Nacos集群提供一个统一的入口并使用默认的轮询策略实现简单的负载均衡。准备四台网络互通并能上外网的主机,这里使用的是四台虚拟机,Nacos节点所需的JDK和Maven均已装好。挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式。在3个Nacos节点上都执行以下命令进入Nacos Server的。转载 2023-01-11 16:05:30 · 515 阅读 · 0 评论 -
Nacos 集群部署2
Nacos支持三种部署模式单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境,确保高可用。多集群模式 - 用于多数据中心场景。注:本文以Linux CentOS7系统为讲述如何部署集群模式(cluster);(虚拟机使用VMware)老规矩环境准备,请确保是在环境中安装使用:64 bit OS Linux/Unix/Mac,推荐使用Linux系统。下载.配置。下载.配置。集群需要依赖mysql,单机可不必3个或3个以上Nacos节点才能构成集群。转载 2023-01-10 18:08:47 · 466 阅读 · 0 评论 -
Nacos 集群部署1
在所有 nacos目录的conf的目录下,有个文件 cluster.conf.example ,将其命名为 cluster.conf,并将每行配置成ip:port。(请配置3个或3个以上节点)在所有 nacos目录的conf的目录下,有个文件 application.properties ,并将修改端口和地址、配置数据库连接。转载 2023-01-10 17:40:34 · 382 阅读 · 0 评论 -
EasyExcel 遭遇 java.io.IOException: Zip bomb detected
在报错代码上一行加上,问题得以解决(阅读报错信息,发现 ratio: 0.009999633802473054,而Limits: MIN_INFLATE_RATIO: 0.01,setMinInflateRatio() if you need to work with files which exceed this limit)在网上搜索其他两种设置: 代表将接受所有可能的比率。转载 2022-12-19 16:12:19 · 4142 阅读 · 0 评论 -
使用 Redis 实现自增流水号
项目上有个场景是客餐申请审核以后需要生成一个流水号,规则为:202202150001,202202150002,前几位为年月日,后四位依次递增。想到 Redis 是基于内存操作的,而且速度比较快,也不占用数据库资源。于是便采用 Redis 实现的方式。形成规则工具类:获取递增:具体实现:输出结果:本地 Redis 库中的数据: Redis 序列化的策略有两种,分别是 StringRedisTemplate 和 RedisTemplate,其中StringRedisTemplate 用转载 2022-12-06 10:12:52 · 3030 阅读 · 0 评论 -
java中日志打印规范
根据不同的日志级别,打印在不同的日志文件中,例如debug、info、warn、error日志级别的日志分别创建一个日志文件debug.log、info.log、warn.log、error.log进行日志打印;使用log来打印日志会记录到日志文件中,占用的是磁盘内存,一般不会经常出现卡(运行极慢)的现象,但如果磁盘内存占用比较高时,需要对日志进行备份处理,然后清理日志;业务系统中,核心功能的代码,尽可能打印日志完整,核心代码执行频率极高,出问题时,根据日志信息能快速定位。转载 2022-12-01 15:34:50 · 3700 阅读 · 0 评论 -
RestTemplateUtil工具类
【代码】RestTemplateUtil工具类。转载 2022-11-28 20:49:39 · 1080 阅读 · 0 评论 -
MybatisPlusConfig
自定义ISqlInjector sql注入器,添加通用方法。2、自定义配置见下面文章。1、详细说明见下面文章。原创 2022-11-22 16:14:16 · 3629 阅读 · 0 评论 -
Mybatis Plus 自定义SqlInjector sql注入器
3、MybatisPlus自定义SQL方法枚举类GeneralMybatisPlusSqlMethod。然后所有的mapper和servcie继承我们自定义扩展的基础mapper和service。2、方法对应的实现类UpdateAllColumnById。参考其他基本方法的实现类源码如:UpdateById等等。4、MybatisPlus配置类,加载自定义sql注入器。6、自定义基础service继承IService及实现类。5、自定义基础Mapper继承BaseMapper。转载 2022-11-22 16:11:03 · 5411 阅读 · 1 评论 -
Mybatis Plus分页查询超过最大页码的自定义处理
之前在很长一度按时间内,因为我做的项目不会这么多的使用分页,所以一直都是手动的判断页码是否溢出,如果溢出就将page的当前页码设置为查询得到的页面数量,再次进行查询。分页用的少还好,一旦像是现在这个项目这样大量的用到分页,就比较头疼了,所以,今天便打算自己封装一个Helper类。最近在做一个管理后台的项目,有很多分页查询,Mybatis Plus提供了非常优秀的分页插件,但是当查询页码大于最大页码的时候,就会出现结果空白。但是这样产生的效果是溢出后按照第一页查询,而笔者现想要在页码溢出时展示最后一页。转载 2022-11-22 15:58:56 · 1829 阅读 · 0 评论 -
SpringBoot 集成Sentinel 实现服务接口限流
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介https随着微服务的流行,服务和服务之间的稳定性变得越来越重要。丰富的应用场景来简单使用一下Sentinel。https。......转载 2022-07-14 21:29:01 · 751 阅读 · 0 评论 -
Maven项目发布jar包到Nexus私服
在编码过程中,有些通用的代码模块,有时候我们不想通过复制粘贴来粗暴地复用。因为这样不仅体现不了变化,也不利于统一管理。这里我们使用maven deploy的方式,将通用的模块打成jar包,发布到Nexus私服,让其他的项目来引用,以更简洁高效的方式来实现复用和管理。一、Maven的settings.xml文件中设置标签<server> <id>nexus-releases</id> <username>admin</username转载 2022-05-30 23:12:39 · 1779 阅读 · 0 评论 -
maven仓库,snapshot快照仓库和release发布仓库的区别
首先看下snapshot类型建立一个maven-privider项目,版本定义为1.1-SNAPSHOT创建一个privider类,写一个hello()方法,并推送maven私有仓库然后再建立一个deploy-practice项目,并引用maven-privider项目然后用main方法测试,如下图所示:打印出hello下面修改下hello方法,推送maven仓库然后我们,不做任何修改,直接运行测试的main方法,结果如下,直接打印出最新修改内容转载 2022-05-30 23:02:49 · 923 阅读 · 0 评论 -
maven快照版本和发布版本
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解...转载 2022-05-30 22:57:43 · 2724 阅读 · 0 评论 -
解决Logback日志不会每天生成新文件的问题2
出现此问题的情况,很有可能是因为FileNamePattern中配置了多个%d的原因,logback默认按照第一个时间日期来分类文件,所以导致按第一个%d{yyyy-MM}配置按月分割的,并不是按照想要的按文件日期分割:而配置多个%d需要怎么处理呢?用aux关键字来进行标识(配置如下:)问题解决,日志文件可以按天进行分割了,并且按月进行归类...转载 2022-05-10 16:45:55 · 487 阅读 · 0 评论 -
解决Logback日志不会每天生成新文件的问题
logback配置文件: 问题现象:上图是最初的logback的配置, 线上发现经常不会按日生成日志文件, 而是一个日志越来越大, 只有在项目重启之后才会生成当天的日志文件。原因分析:该配置使用了基于时间的滚动切割策略 TimeBasedRollingPolicy,每天0点自动生成一份新的日志文件。但里面包含了一段 triggeringPolicy 触发策略,即最大单个文件超过 10MB 自动新成新日志文件,TimeBasedRollingPolicy 是基于时间的,不能和其他策略一转载 2022-05-10 16:43:47 · 4735 阅读 · 1 评论 -
logback之pattern日志格式
定义每行日志记录的格式,官网地址:Chapter 6: Layouts一、pattern日志格式之一常用:%c 输出logger名称%C 输出类名%d{HH:mm:ss.SSS} 表示输出到毫秒的时间%t 输出当前线程名称%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0%logger 输出logger名称,因为Root Logger没有名称,所以没有输出%msg 日志文本%n 换行其他常用的占位符有:%F 输出所在的类文件名,如Log4j原创 2023-06-30 21:51:20 · 3012 阅读 · 0 评论 -
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。网络中搜索到的常见原因:1、检查xml文件所在package名称是否和Mapper interface所在的包名<mapper namespace="me.tspace.pm.dao转载 2022-03-25 21:54:49 · 1371 阅读 · 1 评论 -
聊聊接口性能优化的11个小技巧
聊聊接口性能优化的11个小技巧 - 云+社区 - 腾讯云转载 2022-03-08 21:03:49 · 173 阅读 · 0 评论 -
阿里研究员谷朴:API 设计最佳实践的思考
简介:API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素。但复杂度Complexity并非某一个单独的问题能完全败坏的,而是在系统设计尤其是API设计层面很多很多小的设计考量一点点叠加起来的(也即John Ousterhout老爷子说的Complexity is incremental【8】)。API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素。但复杂度Complexity并非某一个单独的问题能完全败坏..转载 2022-03-08 20:49:10 · 591 阅读 · 0 评论 -
Spring Boot、Spring MVC 和 Spring 有什么区别
1、SpringSpring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。2、Spring MVCSpring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。3、Spr转载 2022-01-04 20:09:29 · 248 阅读 · 0 评论 -
springboot和springmvc的区别
SpringMVC是一个MVC模式的WEB开发框架;spring MVC类似于struts是负责前台和后台的交互,还有就是spring可以集成许多工具,像数据库配置,缓存配置,定时器配置等等都是在spring中完成的,而spring MVC是做不到的。可以把spring看成是一个工具箱,里面有各种工具,springmvc只是其中的一把扳手sprng就像一个强大的整合器,它本身提供了很多写好的功能,但是如果你不想用可以通过spring整合其他的功能。spring mvc 其实他的底层就是s原创 2022-01-04 20:06:37 · 700 阅读 · 0 评论 -
spring boot与spring mvc的区别
1、SpringSpring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。SpringMVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为Spring的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推...原创 2022-01-04 20:03:08 · 356 阅读 · 0 评论 -
Spring和SpringBoot比较,解惑区别
原文出自个人博客:Spring和SpringBoot比较,解惑区别概述 对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了SpringBoot很久的同学来说,还不是很理解SpringBoot到底和Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!什么是Spring 作为Java开发人员,大家都Spring都不陌生,简而言之,S转载 2022-01-04 19:59:41 · 286 阅读 · 0 评论 -
SpringBoot 项目 @EnableWebMvc 注解应用总结
https://blog.csdn.net/testcs_dn/article/details/80249894转载 2022-01-04 19:57:41 · 382 阅读 · 0 评论 -
Spring注解@EnableWebMvc使用坑点解析
https://blog.csdn.net/zxc123e/article/details/84636521转载 2022-01-04 19:56:16 · 263 阅读 · 0 评论 -
EnableWebMvc 使用问题
在配置类中加了一个@EnableWebMvc注解,导致所有的静态资源url访问都通过 dispatcherServlet转发所以,所有的静态资源都访问不到了。使用 @EnableWebMvc 注解,需要以编程的方式指定视图文件相关配置;使用 @EnableAutoConfiguration 注解,会读取 application.properties 或 application.yml 文件中的配置...转载 2022-01-04 19:51:45 · 267 阅读 · 0 评论 -
springboot集成Google kaptcha图形验证码
依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>kaptcha-spring-boot-starter</artifactId> <version>1.1.0</version></dependency>配置文件kaptcha: height: 50 width: 200 content:原创 2021-12-28 17:55:53 · 264 阅读 · 0 评论 -
spring-cloud-alibaba2.2.x 远程调用负载均衡
ribbon其他负载均衡算法说明,和算法切换原创 2021-12-14 09:46:19 · 458 阅读 · 0 评论 -
大佬的 Mybatis-Plus使用技巧,实在太好用了!
今天天就来说说 Mybatis-Plus 的那些使用技巧1、条件查询(QueryWrapper)如果说,我们需要查询的 SQL 语句如下:SELECT*FROMuser_infoWHEREage=201那么对应的代码可以为:QueryWrapper<UserInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("age",20);List<UserInfo>li...转载 2021-09-21 15:32:02 · 1776 阅读 · 0 评论 -
spring boot整合Kafka批量消费、并发消费
写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!由于Kafka的写性能非常高,因此肯定会碰到Kafka消息队列拥堵的情况。遇到这种情况,我们可以通过并发消费、批量消费的方法进行解决。之前配置生产者我没有在yml文件中直接配置,而是新建了一个配置类,在配置类中配置生产者,这样确实有点麻烦了,所以消费者就直接在yml进行配置了。1、先看下批量消费,想要批量消费,首先要开启批量消费,通过listener.type属性设置为batch即可开启转载 2021-09-17 09:19:50 · 13130 阅读 · 2 评论 -
SpringMVC参数封装使用总结
一、springMVC自动封装1、传递参数(1)、GET请求方式传递 参数 后端代码:test(String paramName,String paramName1) 前端代码:$.get(basePath + "/api/params/test?paramName=111¶mName1=222"(2)、POST请求方式传递 参数 后台代码:test(String paramName,String paramName1) 前端代码:$.post(bas...原创 2021-09-11 20:39:04 · 1421 阅读 · 0 评论 -
service层直接调用service层还是dao层
问题引入:java web项目开发中spring service层直接调用service层还是dao层,哪个更合理?一、初步理解service层作为一个业务逻辑处理层,我若直接调用dao层,那么该业务只取出我所需要的数据,我若调用service层,那么就相当于一个业务依赖于另一个业务,耦合度不就高了?所以,到底哪个更合理,想听听你们的理解二、分析总结总结1按我的经验,service a不能调用b的dao层,只能调用b的service层实现业务。因为b的service是对dao.原创 2021-09-05 16:25:38 · 9378 阅读 · 7 评论 -
@Mapper和@Repository注解的区别
在用idea写一个实现类时引用了mapper类的来调用dao层的处理,使用@Autowired注解时被标红线,找不到bean。 解决办法:在mapper加@mapper或者@repository注解。 这两种注解的区别在于: 1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。 2、@reposit...转载 2021-09-02 17:18:34 · 451 阅读 · 0 评论 -
使用idea查看源码小技巧
1、查看方法调用的时序图选中方法名-->右键-->sequence diagram插件2、查看类的继承关系图右键-->diagram-->show diagram原创 2021-07-18 13:46:28 · 773 阅读 · 0 评论 -
springboot多数据源配置
两个数据源confg类@Configuration@MapperScan(basePackages = "com.xxxx.fullSync.dao.crm", sqlSessionFactoryRef = "crmSqlSessionFactory")public class CrmDataSourceAutoConfiguration { //crm mappers路径 private static final String MAPPERS_LOCAL = "classpath原创 2021-05-07 15:30:52 · 433 阅读 · 0 评论