自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kafka原理简介

kafka原理简介

2024-06-14 22:49:17 675

原创 Windows安装和使用kafka

由于kafka依赖jdk和zookeeper,安装kafka之前需要先安装jdk和zookeeper,也可以使用kafka自带的zookeeper。,此处使用kafka自带的zookeeper,不单独安装。下面在Windows系统中安装kafka时使用的ip地址是192.168.10.188,这是我自己电脑的ip。

2024-01-11 23:24:14 1741

原创 Windows和Linux安装jdk

先创建两个纯英文且无空格的目录,例如在D:\MySoftware\Install\JDK目录下创建jdk1.8和jre1.8,将jdk安装到jdk1.8目录下,将java安装到jre1.8目录下。创建“JAVA_HOME”变量,变量名为:“JAVA_HOME ”,变量值为上面安装jdk的目录,即D:\MySoftware\Install\JDK\jdk1.8。点击更改安装目录,选择上面创建的目录,将jdk安装到D:\MySoftware\Install\JDK\jdk1.8目录下。

2024-01-11 22:42:20 866

原创 kafka下载安装部署

Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统,作为hadoop生态系统的一部分,被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式处理引擎。kafka的特性:1.高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒2.可扩展性:kafka集群支持热扩展。

2024-01-07 23:15:44 1323 1

原创 zookeeper下载安装部署

zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目的一个子项目,并根据google发表的一篇论文来实现的。zookeeper为分布式系统提供了高效且易于使用的协同服务,它可以为分布式应用提供相当多的服务,诸如统一命名服务,配置管理,状态同步和组服务等。

2024-01-07 20:38:53 1941

原创 zookeeper概述和原理

分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成脏数据的后果。在这图中有三台机器,每台机器各跑一个应用程序。然后我们将这三台机器通过网络将其连接起来,构成一个系统来为用户提供服务,对用户来说这个系统的架构是透明的,他感觉不到我这个系统是一个什么样的架构。那么我们就可以把这种系统称作一个分布式系统。

2024-01-07 17:30:52 1044

原创 Mybatis动态解析

Mybatis配置文件:mybatis配置文件在src/main/resources目录下,假设是mybatisConfig.xml(名称随意)。如果是spring与mybatis整合,可以将数据源配置放到spring配置文件中。另外,如果mapper接口和mapper配置文件遵循:mapper.java和mapper.xml的文件名相同且在同一个文件夹下,在mybatis配置文件中可以不用配置mapper。

2023-12-06 22:17:55 57

原创 Mybatis原理分析

首先简单回顾一下mybatis的用法。mybatis最主要的就是mybatis配置文件、和SqlSession。

2023-12-06 21:53:56 42

原创 Springboot与mybatis整合

Springboot整合mybatis与spring整合mybatis大致差不多,甚至更加简单,不需要spring的核心配置文件applicationContext.xml,其他基本上差不多。需要引入mybatis-spring-boot-starter依赖,在application.yml文件中配置数据库连接信息。springboot会利用该DataSource自动完成以下工作:1.创建SqlSessionFactoryBean2.创建SqlSessionTemplate。

2023-12-03 23:20:52 166

原创 Spring与mybatis整合

spring与mybatis整合spring与mybatis整合mybatis是一个持久层框架,实现了对数据库操作的封装。可以单独使用mybatis,使用mybatis主要包括以下几个部分:1、编写各个映射文件xxMapper.xml,以及对应的各个接口文件xxMapper.java。

2023-12-03 22:31:01 109

原创 Mybatis批量增删改查

目录结构:2、创建实体类3、创建Mapper接口4、创建Mapper.xml映射文件5、创建mybatis配置文件6、创建测试类进行增删改查。

2023-12-03 21:50:00 77

原创 Mybatis简单使用和详解

Java中操作数据库常用的持久层技术和持久层框架:持久层技术主要有JDBC、JdbcTemplate和DBUtils,持久层框架主要有mybatis和hibernate。

2023-11-29 23:28:33 710

原创 Springboot之starter

创建id-generate-autoconfigure,为了方便,把项目重命名了,原本是叫id-generate-spring-boot-autoconfigure,如下图所示:该项目当中包含:pom.xml、spring.factories、IdGenerateAutoConfiguration、IdGenerateService 和 IdProperties 这5个关键文件,下面逐一看看。

2023-11-19 00:11:12 89

原创 条件注解及自定义注解

目录结构:如何自定义注解?注解其实就是一种标记,可以在程序代码中的关键节点(类、方法、变量、参数、包)上打上这些标记,然后程序在编译时或运行时可以检测到这些标记从而执行一些特殊操作。因此可以得出自定义注解使用的基本流程:第一步,定义注解——相当于定义标记;第二步,配置注解——把标记打在需要用到的程序代码中;第三步,解析注解——在编译期或运行时检测到标记,并进行特殊操作。在底层实现上,所有定义的注解都会自动继承接口。

2023-11-18 18:17:05 160

原创 Swagger注解及SwaggerUI的使用

API详细说明——注释汇总作用范围API使用位置对象属性用在输入参数对象的字段上协议集描述@Api用于controller类上协议描述用在controller的方法上Response集用在controller的方法上Response用在里边非对象参数集用在controller的方法上非对象参数描述用在的方法里边描述返回对象的意义@ApiModel用在返回对象类上Api 用在类上,说明该类的作用。与Controller注解并列使用。

2023-11-18 17:26:14 776

原创 Spring和Springboot中常用的注解

只有一个方法可以用此注解进行注释。可以写一个配置类(带有@Configuration注解的类),在配置类中写一个带有@Bean注解的方法,通过方法生成想要的bean(这就是通过显示的java代码装配的方式创建bean)。需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。默认情况下,bean的ID与带有@Bean注解的方法名是一样的,在上例中,bean的名字就是sgtPeppers,也可以通过name属性为bean指定一个名字,例如上例中的"lonelyHearts"。

2023-11-12 23:16:33 118

原创 数据库连接池和连接串

在java中有非常多优秀的开源数据源可以供大家选择,比如:DBCP、C3P0、Druid、HikariCP等。下图是开源数据源的对比图:在性能方面:HikariCP因为细节方面优化力度较大,性能方面强于Druid。Hikari 是Springboot 2.0 默认的连接池,所以不用加额外的依赖,现在C3P0已经很久没有更新了, 而Druid 和 HikariCP 处于活跃状态的更新中。

2023-11-07 00:27:29 182 1

原创 Spring事务的实现方式

Spring事务有两种实现方式:编程式事务和声明式事务。编程式事务是指通过编码方式实现事务管理,缺点是与业务代码高度耦合,不同的业务代码需要编写不同的事务实现。声明式事务属于无侵入式,不会影响业务逻辑的实现。

2023-11-06 22:52:16 305

原创 Spring bean的作用域和线程安全问题

作用域限定了Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声明scope配置项,可以灵活定义Bean的作用范围。例如,当希望每次IoC容器返回的Bean是同一个实例时,可以设置scope为singleton;当希望每次IoC容器返回的Bean实例是一个新的实例时,可以设置scope为prototype。scope配置项有5个属性,用于描述不同的作用域。使用该属性定义Bean时,IoC容器仅创建一个Bean实例,IoC容器每次返回的是同一个Bean实例。

2023-11-06 22:30:51 46

原创 Spring装配bean的方式

加上@Configuration注解的类就是配置类,该注解的作用就是告诉spring,配置类起到了与XML配置文件相同的作用,好处是不用写那么多复杂的配置文件了。用@Configuration注解类,等价于XML中配置beans,用@Bean标注方法等价于XML中配置bean。@ComponentScan注解能够在spring中开启组件扫描,该注解会使spring默认扫描配置类所在的包及其子包,可以明确设置组件扫描的基础包,查找带有@Component注解的类,在spring上下文中自动创建一个bean。

2023-11-06 00:11:11 153

原创 Spring常用的注入方式

这三种注入方式既可以基于xml配置文件注入,也可以基于@Configuration注解的配置类注入。下面是通过配置文件方式注入的三种方式。如果是基于@Configuration配置类方式注入,就不用写配置文件,但是需要编写配置类,在配置类上加上@Configuration和@ComponentScan(“需要扫描的包名”)注解,同时在UserService和UserDao上加上@Component注解,通常是在Service类上加上@Service注解,在Dao类上加上@Repository注解。

2023-11-05 23:54:07 45

原创 @Transactional失效及事务传播特性

2、如果ServiceA.methodA方法的事务行为类型是PROPAGATION_REQUIRED,即方法上使用@Transactional(propagation=Propagation.REQUIRED)注解,ServiceB.methodB方法上也使用@Transactional(propagation=Propagation.REQUIRED)注解,则ServiceB.methodB方法不会新建事务,而是加入到ServiceA.methodA方法的事务中。

2023-11-05 16:13:44 123

原创 @Transactional原理分析

由于@Transactional注解是通过AOP实现的,可以猜想:在服务启动时,创建spring容器,进行一系列相关bean的创建,如果开启了AOP功能(对于基于注解实现的AOP,可以在启动类上加上@EnableAspectJAutoProxy注解来开启AOP功能),还会缓存所有的切面信息,如果引入与jdbc相关的依赖(spring-boot-starter-jdbc),与@Transactional相关的切面信息自然也会被放到缓存中。当事务有保存点不会去提交事务,而是释放保存点。

2023-11-05 15:37:01 124

原创 Spring AOP的原理(下)

在上一篇文章()中已经分析了创建并获取适配当前bean的增强器,如果在匹配切面的过程中,发现适配的切面,那就需要创建代理对象了。

2023-11-04 23:23:05 99 1

原创 Spring AOP的原理(上)

在当前方法postProcessBeforeInstantiation执行完之后,若返回的不是null,则说明创建了代理对象,接着会调用AbstractAutoProxyCreator的postProcessAfterInitialization方法再次尝试创建代理对象,在该方法中会判断targetSourcedBeans中是否已经包含了目标beanName,若已包含,则直接返回代理对象,说明已创建代理对象,不再重复创建,否则继续尝试创建代理对象。增强器中都会通过反射来调用增强方法,如下所示。

2023-11-04 22:02:48 62 1

原创 Spring AOP的概念及简单使用

AOP(Aspect-Oriented Programming,面向切面编程或面向方面编程)是一种技术,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系。

2023-11-04 00:10:02 83 1

原创 Spring如何解决循环依赖

比如说aop的情况下,x注入y,y也注入x,而y中注入的x需要加代理(aop),但是加代理的逻辑在注入属性之后,也就是x的生命周期走到注入属性的时候,x还不是一个代理对象,那么这个时候把x存起来,然后注入y,获取、创建y,发现y需要注入x,就去三级缓存中获取x,拿出来的x是一个没有代理的对象。在重写的getObject方法中会判断是否需要为当前bean创建代理对象,如果不需要,则直接返回半成品的bean实例,如果需要,则创建并返回代理对象。如果不需要被AOP代理,则直接返回半成品的bean实例。

2023-11-03 00:14:36 40

原创 Spring bean的初始化

常用的spring bean的初始化方法有以下四种:(1)@PostConstruct注解的方法;(2)类实现了InitializingBean接口,实现了afterPropertiesSet方法;(3)通过XML配置文件在标签中的init-method属性指定初始化方法,或者@Bean的initMethod属性指定的方法,如@Bean(initMethod = "init"),其中init是一个方法;

2023-11-01 23:11:21 1467 1

原创 Spring bean的属性注入

如果@Autowired注解用在属性上,就会调用AutowiredFieldElement类的inject方法,如果@Autowired注解用在方法上,就会调用AutowiredMethodElement类的inject方法(这就是@Autowired注解用在属性和方法上的区别)。如果属性是通过@Autowired或@Value注入的,则调用前者的,如果属性是通过@Resource注入的,则调用后者的(面试考点:这里就是@Autowired和@Resource注入属性的一个不同点)。

2023-11-01 22:09:50 143 1

原创 Spring bean的实例化

spring bean的实例化、属性注入和初始化都是在doCreateBean方法中完成的。代码逻辑如下:1.如果bean定义中存在 InstanceSupplier ,会使用这个回调接口创建对象(应该是3.X以后新加的,3.X的源码中没有)2.根据配置的factoryMethodName或factory-mtehod创建bean3.解析构造函数并进行实例化因为一个类可能有多个构造函数,所以需要根据配置文件中配置的参数或者传入的参数确定最终调用的构造函数。

2023-11-01 21:38:27 47 1

原创 Spring bean的生命周期

调用DefaultSingletonBeanRegistry类的isSingletonCurrentlyInCreation方法判断单例bean是否正在创建中,该方法中的singletonsCurrentlyInCreation是一个Set集合,如果单例bean正在创建中,会将正在创建的bean放到该集合中(这一步在AbstractBeanFactory类的doGetBean方法中第二次调用getSingleton方法时完成的),创建完成之后,从该集合中删除bean。一个bean一定是个对象。

2023-11-01 21:06:54 86 1

原创 MySQL索引和SQL优化

索引是一种为了高效查询数据的数据结构。索引类型:主键索引、唯一索引、普通索引、全文索引、组合索引。本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。

2023-10-31 22:05:04 78 1

原创 数据库分层结构和存储引擎

对于每张表,InnoDB有两个文件存储表数据,以frm为后缀的文件存储的是表结构,以ibd为后缀的文件存储的是表中的数据和索引(如果有索引的话),即InnoDB存储引擎是将表数据和索引存储在同一个文件中的。MyISAM有三个文件存储表数据,以frm为后缀的文件存储的是表结构,以MYD为后缀的文件存储的是表中的数据,以MYI为后缀的文件存储的是索引,即MyISAM存储引擎是将表数据与索引分开存储在两个文件中。如果有权限,就继续往下执行,这时候执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

2023-10-31 21:27:49 303 1

原创 数据库事务

MySQL常用的存储引擎有InnoDB(支持事务)和MyISAM(不支持事务)。

2023-08-27 23:20:43 1282 1

原创 java中的POJO、VO、DTO、BO、PO、DO

POJO不包含任何的业务逻辑和持久化逻辑,不担任任何特殊的角色,不继承任何类,也不实现任何接口,这也是POJO的特点,简单、可读性强和独立性,正因为它有此特性,也使得它不受任何特定Java框架的限制,在各种环境中使用,可以在不同的应用程序和层之间自由传递。DTO是一个比较特殊的对象,他有两种存在形式: 在后端,他的存在形式是java对象,也就是在controller里面方法参数上定义的那个对象,通常在后端不需要关心怎么从json转成java对象的,这是由一些框架(如spring)完成的。

2023-07-30 23:59:44 351 1

空空如也

空空如也

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

TA关注的人

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