自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 使用OpenFeign实现服务调用

OpenFeign是运行在客户端的声明式服务调用的框架,通过声明接口的方式来达到对服务的调用,表面上看起来就好像在调用本地方法一样。为了实现代码的复用以及降低代码的耦合度,现在将这些代码独立成一个单独的模块。需要注意的是,必须要提供构造函数,因为OpenFeign需要将JSON数据转换为对象,没有会抛异常。使用Maven工具对其进行打包后,分别对消费者及服务提供者的代码进行重构。服务调用接口,因为使用到了User对象,所以还要创建一个User类。,这个步骤即是对相关的调用进行声明,为接口指定一个。

2023-12-08 14:30:54 208

原创 使用Hystrix实现服务容错

默认情况下,web程序需要依赖tomcat的内置线程池发起服务的调用,这就导致程序中所有的请求都是使用同一个线程池,如果程序中存在一个请求占用的线程比较多,就会间接影响到其他的请求调用。服务熔断跟服务降级很相似,不同的地方在于熔断表示会断开与服务的连接,不过这种断开一般是暂时的,后续还会尝试与服务进行连接,如果还是不行则继续保持熔断状态,反复如此。Hystrix是运行在客户端的,通过一定的手段,规避在不同但互相关联的服务调用中出现的故障和过分的延迟响应,从而防止发生服务雪崩。需要注意的是方法的返回类型。

2023-12-08 14:30:23 47

原创 Spring Cloud Eureka服务治理原理

Eureka服务治理由三部分构成注册中心负责维护服务提供者,从而使服务消费者可以从注册中心获取服务列表。

2023-12-08 14:30:04 39

原创 分布式架构——搭建一个Eureka注册中心

微服务架构的服务治理工作可以由Eureka来完成。它本身用Java语言编写,实现了服务的注册与发现,并且自身内置了Ribbon负载均衡器。

2023-12-08 14:27:42 43

原创 一份JVM的简单总结

tomcat是一个web服务器,但首先它是一个Java程序,这就表示他有一个main程序入口,同时它只有一个系统类加载器。这就出现了一个问题,假如说tomcat中现在有两个web应用,并且这两个应用都有相同的完整类名,由于类无法重复被加载,这就导致了第二个应用中的类就无法被加载了。tomcat的解决办法是为每个应用分别设置各自的类加载器,这样就可以分别加载不同应用中的类,不会发生冲突。

2023-12-08 14:27:10 21

原创 Java注解

现在注解也定义好了,元注解上的参数选项也指定好了,那自定义的注解现在能使用了吗?第一步:创建一个注解接口,用来对Base64编码的字符串进行解码操作。这个注解则是用来指定自定义的注解应该保存到什么时候,第二步:编写一个接口,接口里面有一个方法,用来返回。被自定义注解注释了,我会用它来处理方法的返回值。,这种形式是开发者比较常用的自定义注解方式。现在来开始创建一个完整的自定义注解。上面的代码没有问题,但是如果注解到。可以将注解理解为代码块的注释,,所谓元注解就是注解类的注解。注解注释的方法进行处理。

2023-12-08 14:26:32 20

原创 java泛型,不再迷糊了

T name;E age;在这个自定义泛型类中指定了两个泛型类型,现在编写一个测试类去创建泛型类的对象并输出它@TestBatman<String,Integer> batman = new Batman<>("布鲁斯韦恩",20);运行结果:Batman{name=布鲁斯韦恩, age=20}注意,声明变量接收Batman对象的这行代码中,只为变量指定了具体类型,因为编译器可以根据变量中指定的类型推断出具体类型,所以中的类型可以省略。

2023-12-08 14:25:47 24

原创 java标准日志框架如何使用?它有哪些组成部分?

在日常的开发过程中,往往使用Log4J2、Logback日志框架,因为它们的性能比java提供的日志框架要好。也正是因为这样,导致对java的标准日志框架不是很了解。

2023-12-08 14:25:17 23

原创 什么是Lambda表达式?写一篇Lambda表达式的总结

在Java中,,则将其称之为,为其提供一个会让编译器为其生成一个实例对象,这个中的代码块能覆盖这个实例对象的方法,并在以后执行。这里定义了一个Dog接口,由于这个接口中只有一个抽象方法,所以它是一个,根据以往的经验如果想要使用这个接口中的eat方法,首先要创建一个实现了Dog接口的对象并重写eat方法。运行结果:第一条小狗正在吃饭运行结果:第二条小狗正在吃饭使用Lambda表达式只需要两行代码就能实现相同的功能,并且通过上面这段代码可以得到。

2023-12-08 14:24:41 22

原创 到底什么是反射?反射究竟能用来干什么?

通过调用对象的getClass()方法获取这个类唯一的Class对象,再通过获取到field对象的get(obj)方法获取到这个field的值(当然如果属性是私有的,还需要使用setAccessible方法设置访问标志),并且不仅可以获取,还能通过其set(obj,val)方法重新设置这个属性的值。反射,顾名思义,它是一种逆向的操作。最主要的原因是代码中的关键方法,Array类的静态方法newInstance,这个方法能够返回一个有给定类型,给定大小的新数组,而不是一个简单的Object[]。

2023-12-08 14:24:11 79

原创 实际上在Java中,方法中的对象参数也是按值传递的

所以当你在方法中修改它的值,实际上修改的是这个对象引用的副本,而不是对象引用本身。说的再直白一点,当对这个对象引用的副本进行修改的时候,会为其指向一个新的字符串的地址,但改变的只是副本的引用地址,并不会改变原来的变量指向的地址。现在就可以得到一个结论:方法不能让一个对象参数引用一个新的对象,但是可以改变对象参数的状态(对象中的变量)。为什么说对象参数的传递实际上是值传递,因为传递给方法的对象参数实际上只是对象引用的副本,当方法执行结束后,这些副本就会被丢弃,为什么这次修改成功了呢?

2023-12-08 14:23:37 28

原创 整理一份SpringBoot自动配置实现原理

众所周知,SpringBoot帮助我们省去了过去各种繁琐的编辑配置文件的工作;虽然这并没有让程序员的工作变的更轻松,但确确实实提高了开发的效率,让我们有时间去处理其他的问题。

2023-12-08 14:23:03 22

原创 深入理解Spring之事务管理

事务是指在程序定义的一个操作序列。所有操作要么全部执行成功,要么认为全部执行失败,并且撤销所有操作已经做出的更改。

2023-12-08 14:22:19 23

原创 深入理解Spring之DI循环依赖

Spring在半实例化Bean之后,填充对象属性的时候,利用IOC容器来获取所需的实例并填充到对象属性。DI旨在对象的创建过程中动态的为其注入属性。

2022-12-16 21:55:11 131 1

原创 深入理解Spring之AOP

AOP(面向切面)编程,是一种编程思想;是对面向对象编程OOP的一种增强,OOP是纵向对一个事物的抽象。而AOP是横向的对不同事物的抽象、抽取,而用这种思维去设计编程的方式叫做面向切面编程。@Component @Aspect //定义切面 public class MyAspect {//配置切入点 @Before:前置增强 @Before(value = "execution(* com.demo.User.petEat(..))") public void sayHello() {

2022-12-15 20:07:46 94

原创 深入理解Spring之IOC容器

Inversion of Control,控制反转,是一种设计思想,意在将对象的创建和管理交给容器,等到需要使用对象的时候,从容器中把对象取出来。打个比方说,你手里有多余的钱,但是你不懂经济学,不会理财,所以将钱存到银行交由银行管理,等到你需要用钱的时候可以随时去取。Dependency Injection,依赖注入,意思是说在程序的运行过程中动态的向某个对象中注入他需要的其他对象。打个比方说,你要喝水,去超市买了一个杯子,但是杯子是用来喝水的,所以你需要往杯子中注入水,这个杯子才能实现它的价值。

2022-12-14 06:30:00 140

原创 用过多年的tomcat,从来都没有真正的了解过,重新学习一下(一)

tomcat是一个java语言开发的web应用服务器,或者说是一个servlet(servlet写在后面)容器,适用于中小型系统和并发访问用户不是很多的场合。

2022-10-16 17:57:25 169 1

原创 java集合——LinkedHashSet存储方式(源码跟踪)

LinkedHashSet是HashSet的子类 由于采用数组+双向链表的存储结构,所以添加和取出元素的顺序一致 元素不可重复 线程不安全记录LinkedHashSet执行过程public class test { public static void main(String[] args) { //创建一个LinkedHashSet对象 LinkedHashSet set = new LinkedHashSet(); //添加数据

2021-07-28 21:36:12 284

原创 Mybatis的解析和运行原理概述

Mybatis的解析和运行原理mybatis解析配置文件的主要过程mybatis底层映射保存的数据结构(MappedStatement、SqlSource、BoundSql)Mybatis Mapper的运行原理SqlSession运行原理SqlSession下四大对象的设计原理和具体方法的作用mybatis运行过程读取mybatis配置文件配置缓存到Configuration对象,用来创建SqlSessionFactorySqlSession的执行过程构建SqlSessi

2020-08-18 11:51:08 228

原创 mybatis动态SQL简单使用

mybatis动态SQLifchoose(when,otherwise)trim(where, set)foreachif元素<select> select * from dual where 1=1 <if test="'1'=='1' and '2'!='1'"> and 2=2 </if></select>choose元素<select> select * from dual wh

2020-08-16 19:11:05 150

原创 mybatis映射器使用

mybatis映射器使用crud元素使用方法传递参数的方法和指定返回参数类型resultMap使用方法一对一、一对多、N+1、级联一级缓存和二级缓存的用法调用存储过程crudselect简单select元素应用(查询某一姓氏的数据行总数)<!--paramterType-传入参数类型resultType-返回值类型id-对应mapper接口名--><select id="xxx" parameterType="string" resultT

2020-08-16 17:49:45 159

原创 MyBatis 配置文件元素说明

MyBatis 配置文件properties元素的用法settings元素的配置typeAliases的用法typeHandler在mybatis中的用法ObjectFactory的作用environments的配置databaseIdProvider的用法如何有效引入映射器mybatis配置文件及配置项顺序<configuration><!--配置--> <properties/><!--属性--> <settin

2020-08-16 12:31:50 406

原创 mybatis的核心组件介绍

mybatis的核心组件mybatis的核心组件SqlSessionFactoryBuilder(构造器)作用:根据配置生成SqlSessionFactory(建造者模式——builder)生命周期:在创建SqlSessionFactory后,就失去作用,无需长期存在SqlSessionFactory(工厂接口)作用:可以被认为是一个数据库连接池,生成Sqlsession(工厂模式)生命周期:等同于mybatis的生命周期,应当作为单例存在SqlSession(会话)作用

2020-08-15 22:47:26 187

原创 java常用重点掌握设计模式

java常用重点设计模式示例中代码的入口均为main方法,可以一步一步看。刚刚学习完,总结分享一下1.1 java反射​ 动态实现对象或方法创建,大大增加java可配置性、灵活性,但相比直接new 对象(),性能有所下降1.2 使用反射创建对象//使用反射创建实例public class test(){ //使用反射生成apple实例并调用say() public void getInstance(){ apple app=null; try{ /**

2020-08-14 20:13:56 268

原创 mybatis自动生成映射关系文件(idea-maven)

1.pom文件中引入mybatis-generator-maven-plugin插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version>

2020-07-12 13:19:48 386

原创 HttpURLConnection请求(get/post)

HttpURLConnection请求(get/post)//GET HttpURLConnection connection = null; InputStream is = null; BufferedReader br = null; String result = null; try { ...

2020-01-28 12:58:57 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除