![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
文章平均质量分 67
csj50
这个作者很懒,什么都没留下…
展开
-
Java基础之《mybatis-plus多数据源配置》
引入MyBatis-Plus之后请不要再次引入MyBatis以及mybatis-spring-boot-starter和MyBatis-Spring,以避免因版本差异导致的问题。配置mybatis-plus第一个数据库的SqlSessionFactory和SqlSessionTemplate。配置mybatis-plus第二个数据库的SqlSessionFactory和SqlSessionTemplate。5、@MapperScan和dao层@Mapper二选一。1、pom文件引入依赖。原创 2024-05-02 10:09:51 · 607 阅读 · 1 评论 -
springboot配置WebMvcConfigurationSupport
2、方式2:如果想保持springboot mvc的默认配置,并且自定义更多的mvc配置,如:interceptors、formatters、view controllers等。3、WebMvcConfigurerAdapter是WebMvcConfigurer的实现类,且大部分为空方法,由于Java8中可以使用default关键字为接口添加默认方法,所以在spring5.0之后就已经弃用本类。@EnableWebMvc表示完全自己控制mvc配置,也就是说所有配置自己重写,所有默认配置都没了。原创 2024-04-28 13:29:49 · 653 阅读 · 1 评论 -
springboot @ConditionalOnProperty注解
(4)matchIfMissing:缺少该配置时是否可以加载,如果为true,没有该配置属性时也会正常加载,反之则不会生效。(3)havingValue:它的值与配置文件的值对比,当两个值相同,类会被加载到spring的IOC容器中。@ConditionalOnProperty注解可以有条件的加载bean。(1)prefix:配置文件中的前缀。比如有3个定时任务,想设置开关。(2)name:配置的名字。原创 2024-04-12 13:38:57 · 313 阅读 · 0 评论 -
Java基础之《Stream流(2)》
mapFactory:无参构造函数提供返回类型:提供一个容器初始化方法,用于创建新的Map容器(使用该容器存放值对)(1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中。downstream:值映射:通过聚合方法将同键下的结果聚合为指定类型,该方法返回的是键值对的值。所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。这个接口有三种类型,T代表流中元素的类型,A是中间结果容器的类型,R是最后返回的类型。原创 2024-03-05 15:57:54 · 370 阅读 · 1 评论 -
Java生成16进制字符串
/创建一个随机字符串,其长度是指定的字符数。字符将从字符串指定的字符集中选择,不能为空。如果NULL,则使用所有字符集。//创建一个随机字符串,其长度是指定的字符数,字符将从(a-z、A-Z、0-9)中选择。在org.apache.commons.lang3包下有工具类,不用自己写类了。//16进制校验正则。原创 2024-01-12 16:24:39 · 522 阅读 · 0 评论 -
Java基础之《spring security》
小项目用Shiro的比较多,因为相比Spring Security,Shiro的上手更加的简单。Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。引入依赖后我们再尝试访问之前的接口就会自动跳转到一个Spring Security的默认登录页面,默认用户名是user,密码会输出在控制台。而认证和授权也是Spring Security作为安全框架的核心功能。一般Web应用都需要进行认证和授权。原创 2023-04-04 10:21:02 · 528 阅读 · 0 评论 -
Java基础之《minio(2)—springboot整合minio》
minio依赖okhttp和kotlin,springboot自带依赖版本可能比较老。目前工具类只有浏览器上传、下载功能,没有接口上传下载功能,还要根据使用场景完善。1、创建一个桶Bucket,名字叫test。引用jar包的工具类网上找一个参考参考。(3)为用户设置Access Keys。consoleAdmin:控制台管理。(1)创建一个用户user001。diagnostics:诊断。readwrite:读写。2、创建一个访问用户。5、minio配置类。6、minio工具类。7、minio测试类。原创 2023-03-24 15:01:07 · 1002 阅读 · 0 评论 -
Java基础之《minio(1)—对象存储》
1、An object是二进制数据,有时也称为Binary大对象(BLOB)。blob可以是图像、音频文件、电子表格,甚至二进制可执行代码。3、minio对象存储使用buckets来组织对象。存储桶类似于文件系统中的文件夹或目录,其中每个桶可以容纳任意数量的对象。2、minio这样的对象存储平台提供了专用的用于存储、检索和搜索blob的工具和功能。4、minio存储桶提供与AWS S3存储桶相同的功能。1、minio AGPL v3协议是可以免费使用的。2、编辑sysctl.conf。原创 2023-03-23 10:31:51 · 875 阅读 · 0 评论 -
Java基础之《dubbo(3)—dubbo内核》
当服务的提供者(provider),提供了一个接口多种实现时,一般会在jar包的META-INF/services/目录下,创建该接口的同名文件。而当外部加载这个模块的时候,就能通过jar包META-INF/services/里的配置文件得到具体的实现类名,并加载实例化,完成模块的装配。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候,不在模块里面写死代码,这就需要一种服务发现机制。该文件里面的内容就是该服务接口的具体实现类的名称。原创 2023-03-13 17:27:44 · 314 阅读 · 0 评论 -
Java基础之《dubbo(2)—dubbo架构原理初探》
registry会向consumer推送订阅的信息,providers、configurators、routers。1、provider启动时,会把所有接口注册到注册中心,并且订阅动态配置configurators。2、consumer启动时,订阅providers、configurators、routers。3、则consumer由原来的2次调用变为了3次调用(订阅注册中心、拉取元数据、调用服务)1、变更了访问地址的格式,注册中心只保留最核心的ip、port地址数据。二、dubbo 3.x。原创 2023-03-13 16:41:50 · 207 阅读 · 0 评论 -
Java基础之《dubbo(1)—dubbo基础入门》
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。(3)自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,支持平滑减少或增加机器。(2)集群容错:软负载均衡,失败容错,地址路由,动态配置等集群支持。将独立的业务抽取出来,形成独立的服务(商品,订单,交易)(3)发展一年半,技术人员80个,服务越来越多,SOA。描述:服务提供方的一些服务治理、性能调优的一些配置。描述:服务消费方的一些服务治理、性能调优的一些配置。原创 2023-03-08 11:27:06 · 535 阅读 · 0 评论 -
Java基础之《netty(31)—用netty实现RPC》
2、模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者的服务,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用netty4.x。3、创建一个消费者,该类需要透明的调用自己不存在的方法,内部需要使用netty请求提供者返回数据。1、dubbo底层使用了netty作为网络通讯框架,要求使用netty实现一个简单的RPC框架。2、创建一个提供者,该类需要监听消费者的请求,并按照约定返回数据。1、创建一个接口,定义抽象方法。用于消费者和提供者之间的约定。原创 2023-01-22 14:39:53 · 1234 阅读 · 0 评论 -
Java基础之《netty(30)—RPC调用流程分析》
1、RPC(Remote Procedure Call)—远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序无需额外的为这个交互作用编程。2、两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样。原创 2023-01-22 13:36:24 · 1584 阅读 · 0 评论 -
Java基础之《netty(29)—自定义协议解决TCP粘包拆包》
2、关键就是要解决,服务器端每次读取数据长度的问题。这个问题解决,就不会出现服务器多读或少读数据的问题,从而避免TCP粘包、拆包。2、服务器端每次接收一个message,分5次进行解码,每读取到一个message,会回复一个message对象给客户端。1、要求客户端发送5个message对象,客户端每次发送一个message对象。1、使用自定义协议 + 编解码器,来解决。一、TCP粘包和拆包解决方案。1、编解码器和POJO类。三、客户端发送给服务端。原创 2023-01-22 10:46:30 · 1716 阅读 · 0 评论 -
Java基础之《netty(28)—TCP粘包拆包原理》
1、TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的。2、由于TCP无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题。原创 2023-01-19 15:11:18 · 1684 阅读 · 1 评论 -
Java基础之《netty(27)—Log4j整合到netty》
PS:我用的是slf4j + logback好像你不配置它启动时也会打debug日志。2、配置Log4j,在resources/log4j.properties。1、在maven中添加对Log4j的依赖在pom.xml。1、pom文件添加slf4j和logback依赖包。二、用slf4j + logback。2、编写logback.xml。原创 2023-01-18 15:41:32 · 357 阅读 · 0 评论 -
Java基础之《netty(26)—netty其他常用编解码器》
2、ReplayingDecoder扩展了ByteToMessageDecoder类,使用这个类,我们不必调用readableBytes()方法。(2)ReplayingDecoder在某些情况下可能稍慢于ByteToMessageDecoder,例如网络缓慢并且消息格式复杂时,消息会被拆成了多个碎片,速度变慢。(1)并不是所有的ByteBuf操作都被支持,如果调用了一个不被支持的方法,将会抛出一个UnsupportedOperationException。一、解码器-ReplayingDecoder。原创 2023-01-18 13:42:48 · 704 阅读 · 2 评论 -
Java基础之《netty(25)—handler链调用机制》
1、使用自定义的编码器和解码器来说明netty的handler调用机制。一、netty的handler的调用机制。客户端发送long -> 服务器。服务端发送long -> 客户端。原创 2023-01-17 16:12:48 · 956 阅读 · 0 评论 -
Java基础之《netty(24)—netty入站与出站机制》
例如,实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。ChannelOutboundHandler原理一样,只不过它是用来处理出站数据的。1、netty的组件设计:netty的主要组件有Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe等。2、ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。原创 2023-01-16 16:32:09 · 614 阅读 · 0 评论 -
Java基础之《netty(23)—Protobuf(2)》
2、服务端能接收Student POJO / Worker POJO对象(需要判断是哪种类型),并显示信息(通过Protobuf编码)1、客户端可以随机发送Student POJO / Worker POJO对象到服务器(通过Protobuf编码)完善程序,使Protobuf完成如下功能。一、Protobuf入门案例2。原创 2023-01-11 15:42:25 · 315 阅读 · 0 评论 -
Java基础之《netty(22)—Protobuf(1)》
1、Protobuf是Google发布的开源项目,全称Google Protobuf Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。4、支持跨平台、跨语言,即【客户端和服务端可以是不同的语言编写的】(支持目前绝大多数语言,例如C++、C#、Java、Python等)说明,在idea中编写.proto文件时,会自动提示是否下载.ptotot编写插件,可以让语法高亮。3、Protobuf是以message的方式来管理数据的。9、protobuf使用示意图。原创 2023-01-09 17:24:25 · 995 阅读 · 0 评论 -
Java基础之《netty(22)—netty编码解码机制》
2、codec(编码器)的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据。1、编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发数据时就需要编码,接收数据时就需要解码。一、编码和解码的基本介绍。原创 2023-01-06 17:06:28 · 932 阅读 · 0 评论 -
Java基础之《netty(21)—WebSocket长连接开发》
一、实例要求1、http协议是无状态的,浏览器和服务器间的请求响应一次,下一次会重新创建连接2、要求:实现基于webSocket的长连接的全双工的交互3、改变http协议多次请求的约束,实现长连接了,服务器可以发送消息给浏览器4、客户端浏览器和服务器端会相互感知,比如服务器关闭了,浏览器会感知,同样浏览器关闭了,服务器会感知二、服务端1、WebSocketServer.java2、MyTextWebSocketFrameHandler.java三、客户端1、hello.html四、测原创 2023-01-06 14:50:59 · 2097 阅读 · 0 评论 -
Java基础之《netty(20)—netty心跳机制》
1、编写一个netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲。3、当服务器超过7秒没有读或者写操作时,就提示读写空闲。2、当服务器超过5秒没有写操作时,就提示写空闲。原创 2023-01-04 15:32:39 · 828 阅读 · 0 评论 -
Java基础之《netty(19)—群聊系统2》
2、在GroupChatServerHandler.java中增加一个集合维护用户信息。4、转发或者聊天的时候通过id找到对应的channel,然后把数据扔过去。3、登录的时候,把用户id存入集合中。一、在群聊系统里加入点对点聊天。原创 2023-01-03 17:13:13 · 116 阅读 · 0 评论 -
Java基础之《netty(18)—群聊系统》
4、客户端:通过channel可以无阻塞发送消息给其他所有用户,同时可以接受其他用户发送的消息(由服务器转发得到)1、编写一个netty群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)3、服务器端:可以检测用户上线,离线,并实现消息转发功能。5、目的:进一步理解netty非阻塞网络编程机制。原创 2023-01-03 14:57:22 · 853 阅读 · 0 评论 -
Java基础之《netty(17)—Unpooled类》
写的时候writerIndex先加,readerIndex在后面追赶,只能读到writerIndex的位置。通过给定的数据和字符编码返回一个ByteBuf对象(类似于NIO中的ByteBuffer但有区别)。1、netty提供一个专门用来操作缓冲区(即netty的数据容器)的工具类。不指定索引,用readByte()方法读,readerIndex会增加。Unpooled类获取netty的数据容器ByteBuf的基本使用。4、readerIndex属性和writerIndex属性。原创 2022-12-30 14:31:44 · 1059 阅读 · 0 评论 -
Java基础之《netty(16)—netty核心模块》
1、Bootstrap意思是引导,一个netty应用通常由一个Bootstrap开始,主要作用是配置整个netty程序,串联各个组件,netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类。该方法用于服务器端,用来设置两个EventLoop。该方法用于客户端,用来设置一个EventLoop。该方法用来设置一个服务器端、客户端的通道实现。该方法用于服务器端,用来设置占用的端口号。该方法用于客户端,用来连接服务器。用来给接收到的通道添加配置。原创 2022-12-20 16:37:24 · 526 阅读 · 0 评论 -
Java基础之《netty(15)—HTTP服务》
1、netty服务器在6668端口监听,浏览器发出请求http://localhost:6668/3、目的:netty可以做http服务开发,并且理解handler实例和客户端及其请求的关系。2、服务器可以回复消息给客户端“hello,我是服务器”,并对特定请求资源进行过滤。一、使用netty开发一个简单的http服务。原创 2022-12-19 14:14:30 · 887 阅读 · 0 评论 -
Java基础之《netty(14)—异步模型》
重点说future,它的核心思想是:假设一个方法fun,计算过程可能非常耗时,等待fun返回显然不合适。那么可以在调用fun的时候,立马返回一个future,后续可以通过future去监控方法fun的处理过程(即:Future-Listener机制)3、调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。2、netty中的I/O操作是异步的,包括Bind、Write、Connect等操作会简单的返回一个ChannelFuture。原创 2022-12-19 11:03:05 · 409 阅读 · 0 评论 -
Java基础之《netty(13)—任务队列taskQueue》
例如在推送系统的业务线程里面,根据用户的标识,找到对应的Channel引用,然后调用Write类方法向该用户推送消息,就会进入到这种场景。1、比如在服务器端channelRead中有一个非常耗费时间的业务,我们要异步执行,把它提交到channel对应的NioEventLoopGroup的taskQueue中。2、每个NioEventLoop是一个单线程线程池,提交任务相当于还是它自己来做,只不过是它会根据你设定的ioradio参数来分配io事件和普通任务的时间。1、用户程序自定义的普通任务。原创 2022-12-16 15:26:27 · 2034 阅读 · 0 评论 -
Java基础之《netty(12)—netty入门》
1、netty服务器在6668端口监听,客户端能发送消息给服务器“hello,服务器!3、目的:对netty线程模型有一个初步认识,便于理解netty模型理论。2、服务器可以回复消息给客户端“hello,客户端!原创 2022-12-14 17:35:27 · 826 阅读 · 0 评论 -
Java基础之《netty(11)—netty模型》
(2)当接收到Accept事件,获取到对应的socketChannel,进一步封装成NIOSocketChannel,并注册到Worker线程(事件循环),并进行维护。(4)NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上的socket网络通讯。(3)当Worker线程监听到selector中的通道发生自己感兴趣的事件后,就进行处理(就由handler来完成)。3.处理任务队列的任务,即runAllTasks。原创 2022-12-10 16:14:21 · 389 阅读 · 0 评论 -
Java基础之《netty(10)—Reactor三种模式》
(3)如果是建立连接请求事件,则由Acceptor通过Accept处理连接请求,然后创建一个Handler对象处理连接完成后的后续业务处理。服务器端用一个线程通过多路复用搞定所有的IO操作(包括连接、读、写等),编码简单,清晰明了,但是如果客户端连接数量较多,将无法支撑。(1)Select是前面I/O复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求。(4)如果不是建立连接事件,则Reactor会分发调用连接对应的Handler来响应。在处理高并发的时候,存在瓶颈。原创 2022-12-09 13:52:34 · 882 阅读 · 0 评论 -
Java基础之《netty(9)—netty和线程模型概述》
一、netty概述1、NIO的类库和API繁杂,使用麻烦;需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2、需要具备其他的额外技能,要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。3、开发工作量和难度都非常大,例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。4、JDK NIO的Bug,例如臭名昭著的Epoll Bug,原创 2022-12-07 14:53:41 · 674 阅读 · 0 评论 -
Java基础之《netty(8)—AIO介绍》
一、AIO基本介绍1、JDK7引入了Asynchronous I/O,即AIO。在进行I/O编程中,常用到两种模式:Reactor(反应器模式)和Proactor。Java的NIO就是Reactor,当有事件触发时,服务端得到通知,进行相应的处理。2、AIO即NIO2.0,叫做异步不阻塞的IO。AIO引入异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。3、目前AIO还没有广原创 2022-12-07 13:41:43 · 662 阅读 · 0 评论 -
Java基础之《netty(7)—NIO与零拷贝》
一、零拷贝基本介绍1、零拷贝是网络编程的关键,很多性能优化都离不开。2、在Java程序中,常用的零拷贝有mmap(内存映射)和sendFile。在OS里,他们是怎样的一个设计?3、NIO中如何使用零拷贝。二、传统IO数据读写1、Java传统IO和网络编程的一段代码File file = new File("test.txt");RandomAccessFile raf = new RandomAccessFile(file, "rw");byte[] arr = new byte[(int)file.l原创 2022-12-05 21:53:02 · 771 阅读 · 1 评论 -
Java基础之《netty(6)—NIO快速入门》
1、编写一个NIO入门案例,实现服务器端和客户端之间的数据简单通讯(非阻塞)2、目的:理解NIO非阻塞网络编程机制。原创 2022-12-01 15:23:14 · 488 阅读 · 0 评论 -
Java基础之《netty(5)—NIO之Selector》
2、Selector能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。3、只有在连接真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程。1、Java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器)。原创 2022-11-29 16:45:38 · 455 阅读 · 0 评论 -
Java基础之《netty(4)—NIO之Channel》
(1)通道可以同时进行读写,而流只能读或者只能写。(3)通道可以从缓冲读数据,也可以写数据到缓冲。1、NIO的通道类似于流,但有些区别。(2)通道可以实现异步读写数据。原创 2022-11-23 10:58:07 · 416 阅读 · 0 评论