
java修仙之路
文章平均质量分 82
本专栏包含javaee整体知识体系以及如何进阶称为java高级程序员
哆啦G梦
软件开发爱好者,热爱软件开发,熟悉后端开发,有实战经验
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Nacos
Nacos服务注册和配置中心,兼顾两种Nginx + 3个Nacos + mysql的集群化配置。原创 2024-12-08 13:47:49 · 1016 阅读 · 0 评论 -
SpringCloudSleuth分布式请求链路跟踪
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。当链路特别多的时候就需要有一个用于调用链路的监控和服务跟踪的解决方案SpringCloudSleuth提供了一套完整的服务跟踪解决方案,在分布式系统中,提供了追踪解决方案,并且兼容支持了zipkin。原创 2024-12-08 13:44:12 · 266 阅读 · 0 评论 -
SpringCloud Stream 消息驱动
屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型这就有点像Hibernate,它同时支持多种数据库,同时还提供了Hibernate Session的语法,也就是HQL语句,这样屏蔽了SQL具体实现细节,我们只需要操作HQL语句,就能够操作不同的数据库。官方定义 SpringCloudStream是一个构件消息驱动微服务的框架应用程序通过inputs或者outputs来与SpringCloudStream中binder对象(绑定器)交互。原创 2024-12-08 13:43:31 · 712 阅读 · 0 评论 -
消息总线SpringCloudBUS
分布式自动刷新配置功能,SpringCloudBus配合SpringCloudConfig使用可以实现配置的动态刷新Bus支持两种消息代理:RabbitMQ和KafkaSpringCloudBus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。SpringCloudBus能管理和传播分布式系统的消息,就像一个分布式执行器,可用于广播状态更改,事件推送等,也可以当做微服务的通信通道。原创 2024-12-08 13:42:02 · 720 阅读 · 0 评论 -
分布式配置中心SpringCloudConfig
label:分支,branchname:服务名profiles:环境(dev/test/prod)原创 2024-12-08 13:41:13 · 424 阅读 · 0 评论 -
服务网关详解
全局日志记录统一网关鉴权@Component@Slf4j@Overridelog.info("用户名为null,非法用户");// 放行/*** 过滤器加载的顺序 越小,优先级别越高* @return*/@Overridereturn 0;原创 2024-12-08 09:37:32 · 908 阅读 · 0 评论 -
Hystrix断路器
复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败(网络卡顿,网络超时)熔断打开:请求不再进行调用当前服务,内部设置时钟一般为MTTR(平均故障处理时间),当打开时长达所设时钟则进入半熔断状态熔断关闭:熔断关闭不会对服务进行熔断熔断半开:部分请求根据规则调用当前服务,如果请求成功且符合规则,则认为当前服务恢复正常,关闭熔断。原创 2024-12-08 09:36:14 · 846 阅读 · 0 评论 -
OpenFeign实现服务调用
Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可插拔式的编码和解码器。Spring Cloud对feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。原创 2024-12-08 09:34:51 · 667 阅读 · 0 评论 -
Ribbon实现负载均衡
Ribbon目前已经进入了维护模式,但是目前主流还是使用RibbonSpring Cloud想通过LoadBalancer用于替换Ribbon。原创 2024-12-08 09:34:17 · 699 阅读 · 0 评论 -
Eureka停更后的替换
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发提供了微服务系统中的服务治理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用构建全方位的服务网路,总之Consul提供了一种完整的服务网络解决方案。它具有很多优点,包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议,支持跨数据中心的WAN集群,提供图形化界面,跨平台,支持Linux,MAC,Windows组件名语言健康检查对外暴露接口CAP。原创 2024-12-08 09:33:32 · 907 阅读 · 0 评论 -
Eureka集群
没有集群带来的高可用,会带来单点故障。原创 2024-12-08 09:32:32 · 1132 阅读 · 0 评论 -
微服务基础
微服务架构下的一整套解决方案。原创 2024-12-08 09:31:32 · 377 阅读 · 0 评论 -
Feign配置全局Sentinel流控异常和降级异常
最近在使用feign调用的时候,因为加入了sentinel进行流控和降级机制,在我们如果没有对Sentinel异常处理进行封装的话,默认返回的信息如下所示很显然上述的异常信息,对我们目前的项目来说不太适用,所以就打算在对异常进行封装,使其返回我们项目中统一的格式。原创 2024-12-08 09:29:49 · 613 阅读 · 0 评论 -
SpringBoot项目将Swagger升级3.0
这阵子观察到Swagger官方已经升级到了3.0的版本,想着升级体验一下最新的版本。原创 2024-12-07 11:39:07 · 571 阅读 · 0 评论 -
Swagger-ui.html页面出现404
因为 swagger-ui的引入比较简单,所以我先排查了一下依赖和配置,以及对应方法上的注解,都是正常的,并且同样的配置在mogu_web和mogu_admin项目是正常的,所以非常好奇问题出来哪里?原创 2024-12-07 11:38:27 · 1535 阅读 · 0 评论 -
SpringBoot中使用注解的方式创建队列和交换机
最开始蘑菇博客在进行初始化配置的时候,需要手动的创建交换机,创建队列,然后绑定交换机,这个步骤是非常繁琐的,而且一不小心的话,还可能就出了错误,之前就有个小伙伴在创建交换机的时候 , 将交换机的名称写成了。然后导致消息无法正常被消费,后面通过排查了很久才发现这个问题,下面为了解决这个手动创建的痛苦,使用了注解的方式来进行队列和交换机的创建。原创 2024-12-07 11:37:34 · 421 阅读 · 0 评论 -
SpringBoot拦截器无法注入Bean
今天在给mogu_picture模块添加拦截器,用于拦截用户传递过来的token,并获取到用户信息,这里需要注入RedisUtil工具类但是我在使用的时候,一直报空指针异常,开始以为是代码有问题,后面经过排查是因为没有注入RedisUtil。原创 2024-12-07 11:36:58 · 342 阅读 · 0 评论 -
SpringBoot解决时区问题
蘑菇博客一直存在时区不正确的问题,让我苦不堪言,比如刚刚发表的评论会显示八小时前但是我们查看数据库的和服务器的时间能够发现,时间显示是正常的刚刚发表的评论的时间:以及服务器的时间。原创 2024-12-07 11:35:59 · 986 阅读 · 0 评论 -
Eureka管理页面配置/actuator/info接口返回git信息
通过查阅资料发现,微服务若是用git管理,当前微服务部署的git的版本信息是不可或缺的信息,spring boot admin中通过/actuator/info接口返回git基本信息。添加完成后,我们查看IDEA的Maven,能够发现多出了一个 git-commit-id:revision。发现进去的页面没有 任何内容显示,后面想想可能是没有什么东西没有配置而引起的。然后启动eureka页面,在点击刚刚的a标签,发现能够成功获取到git信息了。这阵子在弄监控页面,我点击eureka里面的地址。原创 2024-12-07 11:35:18 · 304 阅读 · 0 评论 -
Bean的生命周期
在我们没有使用Spring框架之前,创建对象一般都是使用new关键字进行创建,当然除了new关键字外,还有一旦对象不再被使用的时候,将有可能被JVM垃圾回收器进行回收。但是在Spring通过IOC容器进行管理之后,Bean 的生命周期就变得更加复杂了,下图展示了Bean的构造过程。原创 2024-12-07 11:34:40 · 708 阅读 · 0 评论 -
Javase全过程详解(全程干货适合复习)
Java 程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会隐式地调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。基础知识-Java泛型擦除。原创 2024-11-12 14:23:06 · 317 阅读 · 0 评论 -
Tomcat
1.Tomcat的缺省端口是多少,怎么修改?1)找到Tomcat目录下的conf文件夹2)进入conf文件夹里面找到server.xml文件3)打开server.xml文件4)在server.xml文件里面找到下列信息port="8080"改成你想要的端口。原创 2024-11-10 15:21:39 · 825 阅读 · 0 评论 -
SpringBoot
YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl。更具有结构性。一般来说我们从开发到生产,经过开发(dev)、测试(test)、上线(prod)。不同的时刻我们会用不同的配置。Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。它们可以让我们自己选择什么时候用什么配置。原创 2024-11-10 15:17:09 · 853 阅读 · 0 评论 -
Servlet
Servlet是服务器端的程序JSP是服务器页面程序JSP本质上就是一个Servlet,在访问jsp时,在服务器端会将jsp先转换成servlet,再将生产的servlet的结果响应给浏览器。jsp是html页面中内嵌Java代码,侧重页面显示;Servlet是中书写Java代码,侧重逻辑控制;服务端包含(SSI)是一种简单的解释型服务端脚本语言,大多数时候仅用在Web上,用servlet标签嵌入进来。SSI最常用的场景把一个或多个文件包含到Web服务器的一个Web页面中。原创 2024-11-10 09:47:59 · 923 阅读 · 0 评论 -
Nginx
定义错误提示页面。原创 2024-11-10 09:45:25 · 761 阅读 · 0 评论 -
Netty
1.Netty的特点?原创 2024-11-10 09:44:47 · 655 阅读 · 0 评论 -
Mybatis详解
1.什么是Mybatis?MyBatis 是一款优秀的支持自定义 SQL 查询、存储过程和高级映射的持久层框架,消除了 几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以使用 XML 或注解进 行配置和映射, MyBatis 通过将参数映射到配置的 SQL 形成最终执行的 SQL 语句 ,最后将执行 SQL 的结果映射成 Java对象返回。原创 2024-11-09 16:30:19 · 673 阅读 · 0 评论 -
MongoDB
数据库可以看成是一个电子化的文件柜,用户可以对文件中的数据运行新增、检索、更新、删除等操作。数据库是一个所有集合的容器,在文件系统中每一个数据库都有一个相关的物理文件。集合就是一组 MongoDB 文档。它相当于关系型数据库(RDBMS)中的表这种概念。集合位于单独的一个数据库中。一个集合内的多个文档可以有多个不同的字段。一般来说,集合中的文档都有着相同或相关的目的。文档由一组key value组成。文档是动态模式,这意味着同一集合里的文档不需要有相同的字段和结构。在关系型。原创 2024-11-09 16:29:45 · 1014 阅读 · 0 评论 -
Maven详解
Maven的坐标通过groupId,artifactId,version唯一标志一个构件。groupId通常为公司或组织名字,artifactId通常为项目名称,versionId为版本号。原创 2024-11-09 16:28:40 · 903 阅读 · 0 评论 -
Linux详解
如过需要在系统上维护同一文件的两份或者多份副本,除了保存多分单独的物理文件副本之外。还可以采用保存一份物理文件副本和多个虚拟副本的方法,这种虚拟的副本就叫做链接。bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。原创 2024-11-09 16:27:55 · 1038 阅读 · 0 评论 -
Kafka
Kafka集群中,一个kafka实例被称为一个代理(Broker)节点。消息的生产者被称为Producer。Producer将消息发送到集群指定的主题中存储,同时也自定义算法决定将消息记录发送到哪个分区?消息的消费者,从kafka集群中指定的主题读取消息。主题,kafka通过不同的主题却分不同的业务类型的消息记录。每一个Topic可以有一个或者多个分区(Partition)。每个主题在创建时会要求制定它的副本数(默认1)。实际写入到kafka集群并且可以被消费者读取的数据。原创 2024-11-09 11:08:44 · 608 阅读 · 0 评论 -
JVM详解
1.JDK、JRE、JVM关系?Jdk (Java Development Kit) : java语言的软件开发包。包括Java运行时环境Jre。Jre (Java Runtime Environment) :Java运行时环境,包括Jvm。Jdk包括Jre,Jre包括jvm。原创 2024-11-09 11:07:24 · 513 阅读 · 0 评论 -
JSP详解
这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承BodyTagSupport,可以实现doAfterBody这个方法。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其。原创 2024-11-09 11:06:10 · 672 阅读 · 0 评论 -
java集合
HashMap中,如果key经过hash算法得出的数组索引位置全部不相同,即Hash算法非常好,那样的话,getKey方法的时间复杂度就是O(1),如果Hash算法技术的结果碰撞非常多,假如Hash算极其差,所有的Hash算法结果得出的索引位置一样,那样所有的键值对都集中到一个桶中,或者在一个链表中,或者在一个红黑树中,时间复杂度分别为O(n)和O(lgn)。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。原创 2024-11-09 11:05:27 · 963 阅读 · 0 评论 -
Java基础
公共静态不可变,即public static final修饰的变量就是我们所说的编译期常量.这里的public可选的.实际上这些变量在编译时会被替换掉,因为编译器明确的能推断出这些变量的值(如果你熟悉C++,那么这里就相当于宏替换).编译器常量虽然能够提升性能,但是也存在一定问题:你使用了一个内部的或第三方库中的公有编译时常量,但是这个值后面被其他人改变了,但是你的客户端没有重新编译,这意味着你仍然在使用被修改之前的常量值.原创 2024-11-09 11:04:17 · 989 阅读 · 0 评论 -
Java基础(下)
一个程序中可以有多个类,但只能有一个类是主类。在 Java 应用程序中,这个主类是指包含 main()方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。主类是 Java 程序执行的入口点。这里把符合以下条件的对象称为伪数组:1,具有length属性2,按索引方式存储数据。原创 2024-11-09 11:03:39 · 572 阅读 · 0 评论 -
Java多线程
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。synchronized关键字可以时间一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象是对多个线程可见的,那么对该对想的所有读写都将通过同步的方式来进行。原创 2024-11-08 20:15:29 · 1051 阅读 · 0 评论 -
Java多线程
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。synchronized关键字可以时间一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象是对多个线程可见的,那么对该对想的所有读写都将通过同步的方式来进行。原创 2024-11-08 14:30:17 · 778 阅读 · 0 评论 -
Java8
Lambda表达式是Java SE 8,是匿名函数的名称,该匿名函数有助于接受一组不同的输入参数,并提供各种结果结果。Nashorn是在Java SE 8的Java平台上使用的最新Javascript处理引擎。Java SE 8中的流管道用于通过拆分可能在一个流上发生的操作来将操作链接在一起。使用Stream Pipeline的强制性在于存在终端操作,该操作有助于返回最终值并支持管道的终止。Lambda Expression可以定义为允许用户将方法作为参数传递的匿名函数。这有助于删除大量的样板代码。原创 2024-11-08 14:27:50 · 893 阅读 · 0 评论 -
IO&NIO
一个Channel(通道)代表和某一实体的连接,这个实体可以是文件、网络套接字等。也就是说,通道是Java NIO提供的一座桥梁,用于我们的程序和操作系统底层I/O服务进行交互。通道是一种很基本很抽象的描述,和不同的I/O服务交互,执行不同的I/O操作,实现不一样,因此具体的有FileChannel、SocketChannel等。通道使用起来跟Stream比较像,可以读取数据到Buffer中,也可以把Buffer中的数据写入通道。原创 2024-11-08 14:24:41 · 830 阅读 · 0 评论