spring.factories
总结spring.factories的作用是 当外界使用该jar时不用再写配置 会自动加入其中已经配置好的配置
用法及配置123456789101112131415161718192021222324252627282930## Initializersorg.springframework.context.ApplicationContextInitializer=\com.jhj.springboot.autoconfig.MyApplicationContextInitializer ## Application Listenersorg.springframework.context.ApplicationListener=\com.jhj.springboot.autoconfig.MyApplicationListener ## Auto Configuration Import Listenersorg.springframework.boot.autoconfigure.AutoConfigurationImportListener=\com.jhj.springboo ...
java自定义注解
是什么在java中注解有两种,元注解和自定义注解
自定义注解开发者自己定义的注解,包括框架中提供的 @Autowired等等
元注解描述注解的注解元注解 作用 @Target 指定注解使用的适用范围(类、方法、字段等) @Retention 指定注解的生命周期(源码、class文件、运行时等) @Documented 表示该注解会被javadoc文档记录 @Inherited 表示该注解的子类可以继承父类的注解,只能作用于类上的注解
元注解参数说明
@Target
ElementType.METHOD:用于描述方法。
ElementType.TYPE:用于描述类、接口(包括注解类型)或者enum声明。
ElementType.CONSTRUCTOR:用于描述构造器。
ElementType.FIELD:用于描述成员变量、对象、属性(包括enum实例)。
ElementType.LOCAL_VARIABLE:用于描述局部变量。
ElementType.PACKAGE:用于描述包。
ElementType.PARAMETER:用于描述参数。
ElementType.ANNOTATION_ ...
从 .env 文件加载环境变量
下载插件envfile
编写env文件1a=1
引入env文件添加即可
yaml文件中使用12a: ${ a}
作者声明1如有问题,欢迎指正!
springboot集成kafka
docker-compose 安装123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657version: '3'services: zookeeper: image: bitnami/zookeeper:3.8.0 user: root container_name: zookeeper ports: - 2181:2181 environment: # 时区 - TZ=Asia/Shanghai # 允许匿名登录 - ALLOW_ANONYMOUS_LOGIN=yes # zk在集群中的序号(1~255) - ZOO_SERVER_ID=1 # 端口 - ZOO_PORT_NUMBER=2181 volumes: - ./zk:/bitnami/zookeeper kafk ...
selector
基本介绍
Java 的 NIO,用非阻塞的 IO 方式。可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器)
Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。【示意图】
只有在 连接/通道 真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程
避免了多线程之间的上下文切换导致的开销
特点再说明:
Netty 的 IO 线程 NioEventLoop 聚合了 Selector(选择器,也叫多路复用器),可以同时并发处理成百上千个客户端连接。
当线程从某客户端 Socket 通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。
线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出通道。
由于读写操作都是非阻塞的,这就可以充分提升 IO ...
Channel
通道(Channel)基本介绍
NIO的通道类似于流,但有些区别如下:• 通道可以同时进行读写,而流只能读或者只能写• 通道可以实现异步读写数据• 通道可以从缓冲读数据,也可以写数据到缓冲
BIO 中的 stream 是单向的,例如 FileInputStream 对象只能进行读取数据的操作,而 NIO 中的通道(Channel)是双向的,可以读操作,也可以写操作。
Channel在NIO中是一个接口public interface Channel extends Closeable{}
常用的 Channel 类有:FileChannel、DatagramChannel、ServerSocketChannel 和SocketChannel。【ServerSocketChanne 类似ServerSocket , SocketChannel 类似 Socket】
FileChannel 用于文件的数据读写,DatagramChannel 用于 UDP 的数据读写,ServerSocketChannel 和 SocketChannel 用于 TCP的数据读写。
FileChannel ...
Buffer
缓冲区(Buffer)基本介绍缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块,,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffer
Buffer 类及其子类
在 NIO 中,Buffer 是一个顶层父类,它是一个抽象类
常用Buffer子类12345671) ByteBuffer,存储字节数据到缓冲区2) ShortBuffer,存储字符串数据到缓冲区3) CharBuffer,存储字符数据到缓冲区4) IntBuffer,存储整数数据到缓冲区5) LongBuffer,存储长整型数据到缓冲区6) DoubleBuffer,存储小数到缓冲区7) FloatBuffer,存储小数到缓冲区
Buffer类定义了所有的缓冲区都具有的四个属性来提供关于其所包含的数据元素的信息:属性 描述 Capacity 容量,即可以容纳的最大数据量;在缓冲区创建时被设定并且不能改变 Limit 表示缓冲 ...
Java BIO
Java BIO 基本介绍
Java BIO 就是传统的java io 编程,其相关的类和接口在 java.io
BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。 【后有应用实例】
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解
Java BIO 工作机制工作原理图多少个客户端 多少个线程
BIO编程简单流程
服务器端启动一个ServerSocket
客户端启动Socket对服务器进行通信,默认情况下服务器端需要对每个客户 建立一个线程与之通讯
客户端发出请求后, 先咨询服务器是否有线程响应,如果没有则会等待,或者被拒绝
如果有响应,客户端线程会等待请求结束后,在继续执行
例子测试服务端代码编写1234567891011121314151617181920212223242526272829303 ...
Netty(一)
Netty的介绍
Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。
Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。
Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景
要透彻理解Netty , 需要先学习 NIO , 这样我们才能阅读 Netty 的源码
Netty的应用场景互联网行业
互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。
典型的应用有:阿里分布式服务框架Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用Netty 作为基础通信组件,用于实现各进程节点之间的内部通信
游戏行业
无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用
Netty 作 ...
vue项目打包
打包npm run build然后将dist文件夹压缩为dist.tar.gz
注意
在vue.config.js中加入静态配置
12345//assets目录assetsDir: 'static',//控制静态资源访问路径// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。publicPath: './',
如果想进行路由去除/# 需要router配置
123456const router = new VueRouter({ routes, mode: 'history',//去除# base: '/customfile',//基础路径一般不写 除非是子路径 需要集合publicPath并且保持一致})
在devServe中的配置打包不会被打入 所以一些 ...