- 浏览: 10294 次
- 性别:
- 来自: 成都
最新评论
文章列表
一个关于MySQL的8小时问题在项目中的出现。
最近在项目测试过程中出现了数据库连接被close的问题。
现象:
早上一来测试前几条的订单时,就会报连接close,之后一天都是正常的。
初探:
用了C3P0,很自然的就想到了C3P0为什么会把close的连接给项目使用,因为C3P0本身会有检查连接是否有效的机制。自然就想到是不是配置有问题,结果配置了所有的选项,在本地测试都有问题。
本地测试测场景:
1,MySQL的8小时连接无效改成2分钟。
2,C3P0把与检查连接相关的配置全部配置上。
结果让人失望的是,全部不行。
进一步:是不是触发了C3P0的BUG,换阿里的连接池?,不过这个想法 ...
关于Spring的事务
- 博客分类:
- Spring
关于spring的事务,这里纯粹就是记录一下:
现在在大部分项目中,都会把事务交给Spring来管理,这应该是通用的做法了。
1,Spring的事务管理不到类的private,static,protected方法。因为Spring的事务基于接口动态代理的AOP事务。接口的方法都必然是public的。
补充:只要最外层的方法交给了Spring的事务管理后,那么在此方法中再调用private等方法是可以被Spring的事务管理的。(这个只是在当前线程中是按照这样来执行的)。
2,有两个类:classA和classB,classA包含methodA1和methodA2,classB包含metho ...
继续关于死锁的分析:上一篇分析大多只是表面上,概念上的。这篇根据项目中实际出现的死锁问题我们再来进一步分析一下。
来分析之前,先的弄清楚几个问题:
MVCC:
在MySQL的InnoDB中,实现的是基于多版本的并发控制协议(MVC ...
最近在项目中遇到了死锁的问题,在解决死锁的同时,也比较系统的理解了相关的锁,这里记录一下。
了解一下innodb中的锁
基本锁:
共享锁(S锁):读锁:事务T对数据A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
排他锁(X锁):写锁。事务T对数据A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的X锁之前不能再读取和修改A。
注意:如果2个JOB同时获取到了数据A(就是同时给数据A加上了S锁),因为j ...
netty探索之旅八
- 博客分类:
- netty
我们继续EventLoop。走起!
在前一节我们谈到了一个eventloop负责两个工作,第一作为IO线程,负责处理相应的IO操作;第二作为任务线程,执行队列中的任务。
下面我们先来看看负责IO线程中的一个TCP数据是如何从socket中传递到netty的handler中的。
我在netty探索之旅二的时候说了一下Java NIO中的selector的使用流程:
1,通过Selector.open()打开一个Selector。
2,将Channel注册到Selector中,并设置需要监听的事件。
3,不断循环:
调用select()方法---阻塞
调用selecto ...
netty探索之旅七
- 博客分类:
- netty
前面我们分析了Pipeline,还有一个东西值得我们去研究研究,那就是EventLoop。哈哈!我们继续吧!
不管是在客户端还是服务端,在netty启动的时候,都会指定EventLoopGroup,当然用的最多的就是NIO,所以都会指定NioEventLoopGroup。那么这个NioEventLoopGroup在Nnetty中是扮演什么角色的喃!netty是基于Reactor模型的一个实现,那么我们先简单的说明一下Reactor的线程模型。
单线程模型:
所有的acceptor处理和handler处理都在同一个线程中。这种模式的坏处就是显而易见的了,当一个handler阻塞时,会导致所有的 ...
netty探索之旅六
- 博客分类:
- netty
netty中的管道--ChannelPipeline的事件传输机制
在AbstractChannelHandlerContext对象中有inbound和outbound两个boolean变量,用于标识 Context所对应的handler的类型。
inbound=ture,表示对应的ChannelHandler实现了 ChannelInboundHandler方法.
outbound=ture,表示对应的ChannelHandler实现了 ChannelOutboundHandler方法.
在netty中支持两种类型的事件: Inbound和Outbound事件。
看看以下的图:
inb ...
netty探索之旅五
- 博客分类:
- netty
netty中的管道--ChannelPipeline机制
前面我们在提到ChannelPipeline的地方只是简单的描述了一下,这里我们再进一步深入到ChannelPipeline的内部中。
在netty中每一个channel都会只有一个ChannelPipeline与之对应.
在看看AbstractChannel类的构造函数吧,channel的初始化都会到这个父类的构造函数中。
protected AbstractChannel(Channel parent) {
this.parent = parent;
unsafe = newUnsafe( ...
netty探索之旅四
- 博客分类:
- netty
上一篇我们研究了netty的客户端代码,这一篇我们研究一下服务端代码
以下是源码中服务端的启动代码
路径:example\src\main\java\io\netty\example\echo\EchoServer
public static void main(String[] args) throws Exception {
final SslContext sslCtx;
if (SSL) {
SelfSignedCertificate ssc = new SelfSignedCertificate();
...
netty探索之旅三
- 博客分类:
- netty
下面就开始我们的探索之旅
我下载的源码的版本是netty4.0。通过netty源码中自带的例子我们就可以看到netty是如何运行起来的,首先我们来探索客户端。
源码中的客户端启动代码,
路径:example\src\main\java\io\netty\example\echo\EchoClien ...
netty探索之旅二
- 博客分类:
- netty
上一篇只是简单的介绍了一下NIO中的Selector。
这里我还是想再详细点。
通过Selector.open()方法,我们可以创建一个选择器(selector)。
通过channel.register()方法,我们把channel注册到Selector中。
register()方法中的参数:第一个参数selector:创建的选择器;第二个参数指定了对channel的什么事件感兴趣(SelectionKey.OP_CONNECT 连接事件,SelectionKey.OP_ACCEPT 确定事件,SelectionKey.OP_READ 读事件,SelectionKey.OP_WRITE ...
其实一直都在关注NETTY,前面也花了点时间去看过,但是还是觉得对netty还不是很了解,所以还是打算系统的学习一下。并且把学习的过程记录下来,当成后面追溯的地方。以前的学习就是只是看,没有很好的记录,导致不系统不连贯。俗话说:好记性不如烂笔头。
在开始netty探索之旅之前,还是先来回顾一下NIO的知识。
NIO在JDK1.4的时候就已经有了(同步非阻塞IO)。
关于阻塞IO,同步非阻塞IO,异步非阻塞IO,可以参考我其他的博客: http://jishuaige.iteye.com/blog/2355648。里面比较详细的讲解了一下。
这里说一下其他的两个方面:
1:stream ...
前面在【Reactor and Proactor】中讨论了那两种模式,因为Proactor模式需要操作系统级别的支持。所以这里看看融合Reactor和Proactor的解决方案:使用Reactor模拟Proactor。
使用Reactor模拟Proactor的思路其实很简单,就是让Reactor模式中的事件分享者在得知事件发生的时候,让事件分享者来读写数据,读写完成后把数据放到事件处理者提供的缓冲区里面。再通知事件处理者:你所关心的事件已经完成(注意这里不是发生而是完成)。然后事件处理者就直接在自己所提供的缓冲区里面获取数据。事件处理者需要提供:用于存放读到数据的缓存区,读的数据大小,或者用于 ...
引言:
这里准备记录一下自己对TCP服务器的高性能设计模式的理解!
系统IO分为:阻塞型,非阻塞同步型,非阻塞异步型
阻塞型IO:拿read方法来举例,现在系统的一个线程调用了read方法,这时控制权只有等到read调用结束 ...
这节来看看spring的schema是怎么在dubbo中进行使用的。
1)看看dubbo中的dubbo-registry-simple.xml文件,这个文件是dubbo在spring中的bean基于dubbo自己定义的schema文件来配置的。
有了上节介绍的知识,现在来看看这个文件就很好理解了。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xm ...