框架组件库
2023-05-09 15:01:31 1 举报
AI智能生成
java python框架组件库
作者其他创作
大纲/内容
Keras
线性内核线性内核是最简单的内核函数。
多项式内核多项式验证非标准内核函数,该函数非常适合于正交归一化的数据。
高斯核这里是经典的鲁棒径向基核,即高斯核函数。
指数核。
拉普拉斯内核。
方差分析内核。
乙状结肠
Wave内核
三角核
日志内核
内核功能
TensorFlow
Raw
通过Raw对象和事件事件点(event times)
通过读取.fif文件数据生成Epoch对象
通过mne.EpochsArray从头创建Epoch对象
创建Epochs对象方式
从连续的脑电图信号中提取一些特定时间窗口的信号,分析事件,这些时间窗口可以称作为epochs.
Epochs
Evoked potential(EP)诱发电
Evoked
数据结构
sleep_physionet
dataset
子主题 1
参考电极
mne
PyTorch是使用GPU和CPU优化的深度学习张量库。
含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。
张量 Tensors
优化算法的库
对SGD的扩展,可以代替经典的随机梯度下降法来更有效地更新网络权重。
为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。
适应性梯度算法(AdaGrad)
基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。
均方根传播(RMSProp)
Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。
adam
torch.optim
该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口,该接口主要用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch size封装成Tensor,后续只需要再包装成Variable即可作为模型的输入
DataLoader
data
util
多个GPU来加速训练
nn.DataParallel
torch.nn
torch
sklearn是基于python语言的机器学习工具包
广义线性模型
普通最小二乘法
监督学习
pipeline
sklearn
NumPy
OpenCV
Scikit-learn
Pandas
Matplotlib
PyTorch
PaddlePaddle
python
生成实现子类的代理类
fast
CGLIB
生成实现接口的代理类
JDK
动态代理
AOP
Bean容器找到配置文件中Spring Bean的定义
Bean容器利用Java Reflection API创建一个Bean的实例
如果涉及到一些属性值,利用set()方法设置一些属性值
如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字
如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例
如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例
与上面的类似,如果实现了其他*Aware接口,就调用相应的方法
如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法
该方法会在对象属性被设置后,即:调用了setter方法之后被调用
如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法
如果Bean在配置文件中的定义包含init-method属性,执行指定的方法
如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法
当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法
当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。
bean的生命周期
变量方式注入非常简洁,没有任何多余代码
变量注入
构造器注入
set方法注入
注入
减少创建
单例模式
原型模式
第一级缓存:单例池 singletonObjects,它用来存放经过完整Bean生命周期过程的单例Bean对象
第二级缓存:earlySingletonObjects,它用来保存哪些没有经过完整Bean生命周期的单例Bean对象,用来保证不完整的bean也是单例
第三级缓存:singletonFactories,工厂
三级缓存来解决循环依赖
循环依赖
bean
IOC
Nullable
NonNull
NonNullApi
NonNullFields
lang
控制Bean加载顺序
DependsOn
ClassPathXmlApplicationContext启动的Spring容器,通过ClassPathResource以类路径的方式进行访问
FileSystemXmlApplicationContext启动的Spring容器,通过FileSystemResource以文件系统绝对路径的方式进行访问
XmlWebApplicationContext启动的Spring容器,通过ServletContextResource以相对于Web应用根目录的方式进行访问
与ApplicationContext相同的策略
前缀"classpath:"是指定使用ClassPathResource
前缀"file:"则指定使用UrlResource
ResourceLoader
io
core
@ControllerAdvice
produces的作用是指定返回值类型和返回值编码
@RequestMapping
annotation
bind
拦截器(Interceptor)
servlet
web
Prepare this context for refreshing.
prepareRefresh()
Tell the subclass to refresh the internal bean factory.
obtainFreshBeanFactory()
Prepare the bean factory for use in this context.
DefaultListableBeanFactory.registerResolvableDependency
这些特殊实例变量直接获取
注册了可解析依赖项
Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory)
Invoke factory processors registered as beans in the context
invokeBeanFactoryPostProcessors(beanFactory)
Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory)
initMessageSource()
initApplicationEventMulticaster()
onRefresh()
registerListeners()
finishBeanFactoryInitialization(beanFactory)
finishRefresh()
refresh ()
AbstractApplicationContext
support
默认接口代理
boolean proxyTargetClass() default false;
EnableAspectJAutoProxy
例如@EnableAspectJAutoProxy
可以在类上使用,也可以作为元注解使用
可以拆分配置类,然后在程序中按需导入相应的配置
例子 @EnableRetry
@Configuration标注的配置类
根据给定的条件(AdviceMode),选择导入哪些配置类
例如@EnableTransactionManagemen
实现ImportSelector接口的类
按需注册额外的BeanDefinition
例如@EnableAspectJAutoProxy注解
实现ImportBeanDefinitionRegistrar接口的类
@component类
导入
@Import
@Autowired能够用在构造方法、成员变量、方法参数以及注解上
容易违背了单一职责原则 使用这种基于 field 注入的方式,添加依赖是很简单的,就算你的类中有十几个依赖你可能都觉得没有什么问题,普通的开发者很可能会无意识地给一个类添加很多的依赖。但是当使用构造器方式注入,到了某个特定的点,构造器中的参数变得太多以至于很明显地发现 something is wrong。拥有太多的依赖通常意味着你的类要承担更多的责任,明显违背了单一职责原则(SRP:Single responsibility principle)。
依赖注入与容器本身耦合
基于 field 注入的坏处
强制依赖就用构造器方式
可选、可变的依赖就用 setter 注入
方法
@Autowired
context
TransactionAspectSupport
TransactionInterceptor
注解从切面进入事务.所以非切面调用事务不生效
获取事务属性
getTransactionAttribute
确定事务管理器
determineTransactionManager(txAttr)
创建事务管理器如果有必要
AbstractPlatformTransactionManager
createTransactionIfNecessary
调用真实方法
retVal = invocation.proceedWithInvocation();
invokeWithinTransaction
interceptor
abstract Object doGetTransaction()
abstract void doCommit(DefaultTransactionStatus status)
abstract void doRollback(DefaultTransactionStatus status)
存储线程开启事务的 数据库连接
TransactionSynchronizationManager
transaction
(ConnectionHolder) TransactionSynchronizationManager.getResource(obtainDataSource());
doGetTransaction()
DataSourceTransactionManager extends AbstractPlatformTransactionManager
datasource
jdbc
DefaultListableBeanFactory
factory
beans
Refresh
@SpringBootConfiguration
这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到springboot创建管理的容器中
@AutoConfigurationPackage
AutoConfigurationImportSelector的作用是导入哪些组件的选择器
2.0.x默认CGlib动态代理
AopAutoConfiguration
getImportGroup
DeferredImportSelector
BeanClassLoaderAware
ResourceLoaderAware
BeanFactoryAware
EnvironmentAware
Ordered
它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程
@Import(AutoConfigurationImportSelector.class)
判断是否开启自动配置
从META-INF/spring-autoconfigure-metadata.properties文件中载入属性配置
获取所有的配置列表
@EnableAutoConfiguration
@ComponentScan
registerBeanDefinition
registerFeignClient
FeignClientsRegistrar.class
@EnableFeignClients
AnnotationConfigServletWebServerApplicationContext
SERVLET
AnnotationConfigReactiveWebServerApplicationContext
REACTIVE
AnnotationConfigApplicationContext
NONE
createApplicationContext
设置java.awt.headless
configureHeadlessProperty()
初始化META-INF\\spring.factories下SpringApplicationRunListener对应的实现类
SimpleApplicationEventMulticaster
EventPublishingRunListener
getSpringFactoriesInstances
getRunListeners(args)
listeners.starting()
multicastEvent
listeners.environmentPrepared
prepareEnvironment
configureIgnoreBeanInfo
printBanner
prepareContext
见 spring bean加载过程
ConfigurableApplicationContext.refresh()
refreshContext
afterRefresh
listeners.started(context)
ApplicationRunner.class
CommandLineRunner.class
执行
callRunners
listeners.running(context)
run
SpringApplication
ApplicationEvent
SpringApplicationRunListener
Set<ApplicationListener<?>> applicationListeners
DefaultListenerRetriever
AbstractApplicationEventMulticaster
event
ErrorController
error
boot
cap原理
DistroConsistencyServiceImpl
服务端注册
心跳
特殊场景
服务端某节点宕机,不回复其他服务端节点的健康检查请求,则会被其他节点从健康节点列表中剔除,其他节点重新分配负责节点,依靠客户端的心跳重新建立完整的服务数据
验证任务startVerifyTask()
同步任务startLoadTask();
纯内存保存
Distro
AP
EphemeralConsistencyService
POST HTTP://{ip:port}/v1/ns/raft/vote : 进行投票请求
POST HTTP://{ip:port}/v1/ns/raft/beat : Leader向Follower发送心跳信息
GET HTTP://{ip:port}/v1/ns/raft/peer : 获取该节点的RaftPeer信息
PUT HTTP://{ip:port}/v1/ns/raft/datum/reload : 重新加载某日志信息
POST HTTP://{ip:port}/v1/ns/raft/datum : Leader接收传来的数据并存入
DELETE HTTP://{ip:port}/v1/ns/raft/datum : Leader接收传来的数据删除操作
GET HTTP://{ip:port}/v1/ns/raft/datum : 获取该节点存储的数据信息
GET HTTP://{ip:port}/v1/ns/raft/state : 获取该节点的状态信息{UP or DOWN}
POST HTTP://{ip:port}/v1/ns/raft/datum/commit : Follower节点接收Leader传来得到数据存入操作
DELETE HTTP://{ip:port}/v1/ns/raft/datum : Follower节点接收Leader传来的数据删除操作
RaftConsistencyServiceImpl
Raft
CP
PersistentConsistencyService
DelegateConsistencyServiceImpl
nacos
consul
ZK是往Leader(主节点)去写数据
zookeeper(见hadoop分支)
注册中心
SPI重写线程池获取ThreadLocal值
线程隔离
信号量隔离
为每一个需要被调用的服务维护了一个独立的线程池,这样每个服务都有自己的使用资源,当某个服务出现问题时,大家互不影响。
信号量隔离我理解为对线程池隔离的一个补充功能,如果开辟专有线程池的开销远远大于该依赖服务正常的访问时间,那么我们就可以使用信号量隔离。
信号量的开销确实是小于线程池的开销的,不过信号量做不到线程池的设置超时和异步访问,所以啊,在确保服务确实靠谱的情况下,再采用信号量哈
hystrix舱壁模式
构建HystrixCommand或HystrixObservableCommand
Connection reset by peer
服务器返回了RST
Connection reset
hystrix
dashboard
统计数据:统计某个资源的访问数据(QPS、RT等信息)
规则判断:判断限流规则、隔离规则、降级规则、熔断规则是否满足
限流、隔离、降级、熔断
基于责任链模式来设计,将不同的功能(限流、降级、系统保护)封装为一个个的Slot,请求进入后逐个执行
StatisticSlot:负责统计实时调用数据,包括运行信息、来源信息等
ClusterBuilderSlot:负责构建某个资源的ClusterNode,ClusterNode可以保存资源的运行信息(响应时间、QPS、block 数目、线程数、异常数等)以及来源信息(origin名称)
NodeSelectorSlot:负责构建簇点链路中的节点(DefaultNode),将这些节点形成链路树
statistic
AuthoritySlot:负责授权规则(来源控制)
SystemSlot:负责系统保护规则
ParamFlowSlot:负责热点参数限流规则
FlowSlot:负责限流规则
DegradeSlot:负责降级规则
rule checking
ProcessorSlotChain
sentinel
熔断限流
actuator
extends AbstractHandlerMapping(spring-webflux)
寻找路由匹配 返回 webHandler
找到yml中配置的所有的路由断言工厂执行
lookupRoute
getHandlerInternal
找到对应的适配器HandlerAdaptor,执行过滤器链
RoutePredicateHandlerMapping
globalFilters转化成GatewayFilterAdapter。 GatewayFilterAdapter在内部集成了GlobalFilter,同时也实现了GatewayFilter,使 globalFilters和gatewayFilters在 适配器 类GatewayFilterAdapter中共存
implements WebHandler(spring-web)
FilteringWebHandler
见 spring
spring-webflux
为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host
- PreserveHostHeader
去掉一层url前缀
- StripPrefix=1
为原始请求添加Header
- AddRequestHeader
AddRequestParameter
AddResponseHeader
剔除响应头中重复的值
DedupeResponseHeader
为路由引入Hystrix的断路器保护
Hystrix
filter
gateway
网关
#feignfeign.httpclient.enabled=truefeign.hystrix.enabled=truefeign.client.config.default.connectTimeout = 30000feign.client.config.default.readTimeout = 30000#ribbonribbon.OkToRetryOnAllOperations=falseribbon.ConnectTimeout=20000ribbon.ReadTimeout=50000ribbon.SocketTimeout=30000ribbon.ServerListRefreshInterval=10 ribbon.MaxAutoRetries=0ribbon.MaxAutoRetriesNextServer= 1#hystrixhystrix.command.default.execution.timeout.enabled=truehystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=20000
配置
cloud
RequestMappingHandlerAdapter
doDispatch
doService
前端控制器(DispatcherServlet)
处理器映射器(HandlerMapping)
拦截器
Handler处理器
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
视图(View)
1.发起请求到前端控制器(DispatcherServlet)2.前端控制器请求处理器映射器(HandlerMapping)查找Handler(可根据xml配置、注解进行查找)3.处理器映射器(HandlerMapping)向前端控制器返回Handler4.前端控制器调用处理器适配器(HandlerAdapter)执行Handler5.处理器适配器(HandlerAdapter)去执行Handler6.Handler执行完,给适配器返回ModelAndView(Springmvc框架的一个底层对象)7.处理器适配器(HandlerAdapter)向前端控制器返回ModelAndView8.前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)进行视图解析,根据逻辑视图名解析成真正的视图(jsp)9.视图解析器(ViewResolver)向前端控制器(DispatcherServlet)返回View10.前端控制器进行视图渲染,即将模型数据(在ModelAndView对象中)填充到request域11.前端控制器向用户响应结果
springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method
基于mvc拦截器
spring-mvc
\treturn Flux.fromIterable(this.handlerMappings) \t\t// 1.遍历所有的 handlerMapping
.concatMap(mapping -> mapping.getHandler(exchange)).next() // 2.获取对应的handlerMapping ,比如常用的 RequestMappingHandlerMapping、RoutePredicateHandlerMapping
处理所有过滤器链的方法
LoadBalancerClientFilter
负载均衡
ForwardRoutingFilter
转发路由网关过滤器
基于 Netty 实现的 HttpClient 请求后端 Http 服务
NettyRoutingFilter
将 NettyRoutingFilter 请求后端 Http 服务的响应写回客户端
NettyWriteResponseFilter
HTTP
WebsocketRoutingFilter
websocket
WebClientHttpRoutingFilter
WebClientWriteResponseFilter
org.springframework.cloud.gateway.filter.WebClient实现的 HttpClient 请求后端 Http 服务
webclient
globalFilters
见gatway
网关适配器
webHandler.handle
SimpleHandlerAdapter
HandlerAdapter
链式调用
handle
DispatcherHandler
AbstractHandlerMethodMapping
AbstractUrlHandlerMapping
RouterFunctions
PropertySourcesPropertyResolver
Backpressure 其实是一种现象:在数据流从上游生产者向下游消费者传输的过程中,上游生产速度大于下游消费速度,导致下游的 Buffer 溢出,这种现象就叫做 Backpressure 出现。
反应式 HTTP
服务器推送事件
WebSocket 的客户端和服务器端的支持
reactor-core实现响应式
Reactor
如果消息不可路由,应该通过Basic.Return RPC命令将消息返回给发布者。
mandatory
ConfirmCallback为发送Exchange(交换器)时回调,成功或者失败都会触发;
confirmCallback
ReturnCallback为路由不到队列时触发,成功则不触发;
returnCallback
sendConnectionFactorySelectorExpression
receiveConnectionFactorySelectorExpression
RabbitTemplate支持SpELsendConnectionFactorySelectorExpression 和receiveConnectionFactorySelectorExpression 属性,这些属性每个在每个AMQP协议的交互操作(send、sendAndReceive、receive、receiveAndReply)都会计算解析出来AbstractRoutingConnectionFactory提供的lookupKey值。您可以使用bean引用,例如在表达式中使用@vhostersolvergetVHost(#root)。在send操作中,要发送的消息是根源计算对象。在receive操作中,queueName是根源计算对象。
afterReceivePostProcessors
beforePublishPostProcessors
参数
RabbitTemplate
ConnectionFactory
spring-rabbit
spring-amqp
获取当前 request 对应的权限配置,调用访问控制器进行鉴权操作
FilterSecurityInterceptor
MethodSecurityInterceptor
AspectJMethodSecurityInterceptor
少数服从多数授权访问决策方案。
ConsensusBased
要求所有 AccessDecisionVoter 均返回肯定的结果时,才代表授予权限
UnanimousBased
只要任一 AccessDecisionVoter 返回肯定的结果,便授予访问权限。
AffirmativeBased
AccessDecisionManager
AfterInvocationManager
RunAsManager
AuthenticationManager
MessageSourceAccessor
AbstractSecurityInterceptor
Spring Security Filter Chain
@PreAuthorize
@EnableGlobalMethodSecurity(prePostEnabled = true)。
http.authorizeRequests() .url匹配规则1.权限控制方法1 .url匹配规则2.权限控制方法2...
permitAll()表示所匹配的URL任何人都允许访问
anonymous()表示可以匿名访问匹配的URL。和permitAll()效果类似,只是设置为anonymous()的url会执行filterChain中的filter
denyAll()表示所匹配的URL都不允许被访问。
authenticated()表示所匹配的URL都需要被认证才能访问
rememberMe()允许通过remember-me登录的用户访问
权限控制
anyRequest()
antMatcher(String regx),传递一个ant表达式参数,表示匹配所有满足ant表达式的请求
regexMatchers(String regexPattern) 传递一个参数
匹配规则
authorizeRequests()
HttpSecurity
configure()
WebSecurityConfigurerAdapter
SavedRequestAwareAuthenticationSuccessHandler
spring-security
org.springframework
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。在HttpServletResponse到达客户端之前,拦截HttpServletResponse。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
过滤器
sendRedirect(String url)
HttpServletResponse
HttpServletRequest
http
注册NioServerSocketChannel
注册NioSocketChannel
管道(SelectableChannel)
选择器(Selector)
选择键(SelectorKey)
组成
Selector(多路复用器)
NioEventLoop
NioEventLoopGroup
一个Channel包含一个ChannelPipeline,所有ChannelHandler都会注册到ChannelPipeline中,并按顺序组织起来。
Channe
客户端发起请求再接受请求,先 outbound再inbound。服务端:先接受请求再发送请求,先inbound再outbound.
NettyInbound
sendUpstream
ChannelSink
NettyOutbound
sendDownstream
一个ChannelEvent并不会主动的"流"经所有的Handler,而是由上一个Handler显式的调用ChannelPipeline.sendUp(Down)stream产生,并交给下一个Handler处理。也就是说,每个Handler接收到一个ChannelEvent,并处理结束后,如果需要继续处理,那么它需要调用sendUp(Down)stream新发起一个事件。如果它不再发起事件,那么处理就到此结束,即使它后面仍然有Handler没有执行。这个机制可以保证最大的灵活性,当然对Handler的先后顺序也有了更严格的要求。
ChannelPipeline
EventLoop
ChannelUpstreamHandler
ChannelDownstreamHandler
ChannelHandler
Channel
模型
第一创建与服务端的连接(即OP_CONNECT事件),第二就是进行IO读写、编解码、业务逻辑等操作(即OP_READ事件、OP_WRITE事件)
客户端发出连接请求的同时会自己创建一条NioSocketChannel通道与服务端NioSocketChannel进行互通,连接完之后就是WorkGroup的事了,不需要BossGroup管了
一个客户端连接对应一条服务端NioSocketChannel
ClientGroup
客户端
向WorkGroup中的某个Selector注册刚才创建好的NioSocketChannel
ServerBootStrapAcceptor
创建一个NioSocketChannel实例
对客户端的新连接请求进行处理(OP_ACCEPT)
BossGroup
负责处理IO读写、编解码、业务逻辑等(即OP_READ事件、OP_WRITE事件)
WorkGroup
服务端启动的时候会绑定一个端口,作为后续客户端连接入口
服务端
SelectionKey.OP_READ
SelectionKey.OP_WRITE
SelectionKey.OP_ACCEPT
SelectionKey.OP_CONNECT
IO事件类型
概念
对应 mainReactor
对应 subReactor
多线程的Reactor模式
EpollEventLoop
多路复用
netty
Flux是一个发出(emit)0-N个元素组成的异步序列的Publisher
just
Flux
Mono 是一个发出(emit)0-1个元素的Publisher
Mono
publisher
reactor
collection
结果嵌套
SqlSessionFactoryBuilder(构造器)
SqlSessionFactory:依靠工厂来生成SqlSession。
SqlSession:是一个既可以发送SQL去执行并返回结果的,也可以获取Mapper接口,通过Mapper接口查询并封装数据。
SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或者注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
执行流程
日志
异常
缓存
xml解析,${} 格式的字符串解析
org.apache.ibatis.parsing
解析
实现java和jdbc中的类型之间转换
类型处理器
绑定
注解
映射
执行器
org.apache.ibatis.transactionorg.apache.ibatis.transaction.jdbcorg.apache.ibatis.transaction.managed
事务
数据源
org.apache.ibatis.sessionorg.apache.ibatis.session.defaults
会话
mapper.xml中的namespace和实际的mapper文件不一致
mapper接口中的方法名和mapper.xml中的id标签不一致
Mapper.xml没有构建进去
配置文件导不出来
mapper-locations 配置 xml
Invalid bound statement (not found)
BindingException
generator
PersistenceException
exceptions
selectList()
defaults
session
SqlSession执行增删改查都是委托给Executor
CachingExecutor用于处理二级缓存,如果缓存中不存在要查询的数据,那么将查询请求委托给其他的Executor。如果是执行SQL的增删改,那么CachingExecutor将清空二级缓存。
CachingExecutor
BaseExecutor是除CachingExecutor之外,其他Executor实现类的基类。该类主要处理一级缓存
BaseExecutor
SimpleExecutor
BatchExecutor
Executor
executor
Plugin
MybatisPlusInterceptor(mybaits-plus实现)
PageInterceptor(pagehelper实现)
PaginationInterceptor(mybatis-plus作废的实现)
Interceptor
plugin
apache.ibatis
SqlSessionTemplate
spring
mybatis
org
protected long limit = 500L;
PaginationInterceptor
plugins
extension
com.baomidou.mybatisplus
mybatisplus
getConnectionDirect
源码
GetConnectionTimeoutException
Exception
DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。
初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize
最大连接池数量
maxActive
最小连接池数量
minIdle
获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait
是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
poolPreparedStatements
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
默认 true
testOnBorrow
testOnReturn
默认 false
有两个含义: 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle false
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis
testWhileIdle
Druid
锁定事务单元(lock)
确认事务模块状态(confirm)
通知事务(notify)
TX-LCN
维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
Transaction Coordinator (TC): 事务协调器
负责开启一个全局事务,并最终发起全局提交或全局回滚的决议
Transaction Manager (TM): 控制全局事务的边界
负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
Resource Manager (RM): 控制分支事务
TM是一个分布式事务的发起者和终结者,TC负责维护分布式事务的运行状态,而RM则负责本地事务的运行
Read Uncommitted
隔离级别
TM 要求 TC 开始新的全局事务。TC 生成一个代表全局事务的 XID。
XID 通过微服务的调用链传播
RM将本地事务注册为XID对应的全局事务的一个分支到TC。
TM 要求 TC 提交或回滚 XID 对应的全局事务。
TC 驱动 XID 对应的全局事务下的所有分支事务完成分支提交或回滚。
生命周期
Seata
监控
MetricsMonitor
multimap
multiset
google-guava
ConnectionImpl
mysql-connect-java
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scan
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 <appender>。<logger> 仅有一个name属性,一个可选的level和一个可选的addtivity属性
<logger>
是负责写日志的组件。该标签负责以适当的格式将日志记录事件输出到适当的输出设备
滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
RollingFileAppender
常用的 appender 类型
对日志进行格式化
<encoder>
<appender>
<configuration>
标签
logback
log
gRPC (gRPC Remote Procedure Calls) 是 Google 发起的一个开源远程过程调用系统
gRPC
Dubbo是阿里巴巴开源的基于 Java 的高性能RPC(一种远程调用) 分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
泛化调用
Dubbo
rpc
使用表达式访问Json数据
JSONPath
fastjson
多态类型的序列化及反序列化
JsonTypeInfo
Jackson
json
JSqlParser
reflections
java
框架组件库
0 条评论
回复 删除
下一页