- 博客(340)
- 资源 (1)
- 收藏
- 关注
原创 BeanFactoryAware在InitializingBean之后执行,奇怪的Spring初始化顺序?
对于单个bean来说,确实是先执行BeanFactoryAware,后执行InitializingBean。但是对于不同的bean来说,并没有这个顺序保证。上面测试可以看出:先定义的bean先执行。spring判断bean的依赖关系,无非就是构造注入和set注入,上面的2个A和B并没有显示地依赖关系,虽然逻辑上是B依赖于A,但是spring并不知道这种关系。为了让spring知道这种逻辑上的依赖关系,spring专门提供了depends-on.
2016-10-31 20:31:40 3962 1
原创 使用当当网的Config Toolkit集中管理分布式集群的配置数据
在大型集群和分布式应用中,配置数据不宜分散到集群结点中,应该集中起来统一管理。本文主要介绍如何使用config toolkit这个开源工具。
2016-10-26 13:09:04 4648 2
原创 nodejs搭建一个简单的httpserver
学习开源组件HttpClient的时候,需要连接一个httpserver。我们可以使用eclipse+tomcat+j2ee搭建一个httpserver开发和部署环境,但是这种方式稍微麻烦一些。我的做法是:安装nodejs,用nodejs来开发一个简易的httpserver,这样可以直接用js来编写点,对开发环境和部署要求少。
2016-09-13 16:24:08 3594
原创 一段实用的maven pom:将项目依赖打包到文件夹或打入jar中
使用了maven-assembly-plugin插件和maven-dependency-plugin,将依赖打入jar和文件夹
2016-09-13 16:15:41 20130 2
原创 慎用subList:ArrayList$SubList.add导致的java.lang.StackOverflowError
也就是说:调用A的subList()得到B,调用B的subList()得到C,.....调用n的subList()得到n+1。这样就会得到一个庞大的应用链:n+1 指向n,.....C指向B,B指向A。当调用n+1这个list的add()方法时候,会一直递归调用到A的add()方法,当数据很多的时候自然就栈溢出了。
2016-08-27 12:49:10 4111
原创 redis的持久化:AOF的配置和原理
RDB最大的不足之处在于:一旦数据库出现问题,由于RDB文件中保存的数据并不是全新的。从上次RDB文件生成到redis宕机,这段时间的数据全部丢掉了(因为刷写机制还没有出发)。AOF比RDB有更好的持久性。在使用AOF的时候,redis会将每一个收到的写命令都通过write()系统函数追加到aof文件中,类似于MySQL的binlog。当redis重启后,会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
2016-07-30 15:35:23 16178
原创 在一台linux机器上启动多个redis实例:学习redis的master-slave功能
linux机器上安装redis是非常容易的,这里不做介绍了。因为要学习主从复制功能,而我手上又只有一台机器,所以就需要在一台机器上启动多个redis实例。我们需要将默认的redis.conf文件复制一份,然后修改一下对应的设置就可以了,保证多个redis实例不出现共享数据就可以了。从服务器可以在主从服务器之间的连接断开时进行自动重连, 在 Redis 2.8 版本之前, 断线之后重连的从服务器总要执行一次完整重同步(full resynchronization)操作, 但是从 Redis 2.8 版本开始,
2016-07-28 18:02:19 26749
原创 redis的持久化:RDB的配置和原理
1.新的RDB文件存储的是执行fork那一刻的内存数据。2.任何时候RDB文件都是完整的。3.除了自动快照,还可以手动发送SAVE或BGSAVE命令让Redis执行快照。4.Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。5.通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据
2016-07-27 15:01:14 18348 5
原创 redis数据类型List的安全队列和不安全队列
一般情况下,我们可以借助List来实现消息队列,比如一个客户端通过命令LPUSH(BLPUSH)把消息入队,另一个客户端通过命令RPOP(BRPOP)获取消息。这种方式实现的队列是不安全的。那怎么来实现一个安全的队列呢?可以使用redis的 RPOPLPUSH (或者其阻塞版本的 BRPOPLPUSH)命令。
2016-07-21 11:18:32 8373
原创 redis数据类型List的常用命令
redis的文档写的还是比较详细的,中文版: http://doc.redisfans.com/ 英文版:http://redis.io/commands。这篇文章主要是自己亲自实践一下redis的基本操作,做个备忘,加深印象。
2016-07-20 18:32:49 7897
原创 redis数据类型SortedSet的常用命令
redis的文档写的还是比较详细的,中文版: http://doc.redisfans.com/ 英文版:http://redis.io/commands。这篇文章主要是自己亲自实践一下redis的基本操作,做个备忘,加深印象。
2016-07-20 17:10:31 1890
原创 redis数据类型Set的常用命令
redis的文档写的还是比较详细的,中文版: http://doc.redisfans.com/ 英文版:http://redis.io/commands。这篇文章主要是自己亲自实践一下redis的基本操作,做个备忘,加深印象。
2016-07-20 13:02:56 1814
原创 redis数据类型Hash的常用命令
redis的文档写的还是比较详细的,中文版: http://doc.redisfans.com/ 英文版:http://redis.io/commands。这篇文章主要是自己亲自实践一下redis的基本操作,做个备忘,加深印象。
2016-07-20 11:03:11 1215
原创 学习GitHub(四): git config
git的配置数据可以分为3种:local级别、global级别和system级别。不同的git版本,这些配置文件的位置会不一样,我用的是Git-2.8.2-64-bit。这3个配置文件,并不都是安装完后就有了,可能只有在我们真正添加配置项的时候才会生成。
2016-05-26 16:46:39 3429
原创 学习GitHub(三): git分支的创建、合并和删除
上一篇文章里介绍了一些git最基本的命令,所做的操作都是在master分支上进行的。Git的分支与SVN分支概念是一致的,master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面直接修改。如果我们要修复一个紧急bug,或者是为临时增加一些新功能,一般都会新建一个dev分支,等开发完毕,验证没有问题之后,才会将dev分支上的修改并到主分支master上来。
2016-05-24 19:03:15 6686
原创 学习GitHub(二): git基本命令
强烈声明:本文参考涂根华的"Git使用教程"文章,这篇文章写的实在太好了,这里自己再亲自实践一遍,加深印象。版本库又名仓库,英文名repository,可以简单的理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件还原。所有的版本控制系统,只能跟踪文本文件的改动.
2016-05-23 17:38:55 12584
原创 学习GitHub(一): windows7 64位系统安装msysGit客户端
为了在windows下使用Git,我们需要安装msysGit这个客户端工具,它可以让我们用CMD或者GUI的方式使用Git。下载地址1:https://git-for-windows.github.io/下载地址2:https://git-scm.com/download/
2016-05-23 09:56:20 13786
原创 javascript正则RegExp.test()需要注意:不具有可重入性
对于同一个正则表达式对象regex,不能重复调用:第一次返回true,第二次就返回false,很显然这种效果不是我们想要的。这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了。解决方式挺简单:每次都让test从第0个位置开始匹配就可以了。
2016-05-21 16:08:49 2541 1
原创 AngularJS scope的一个特性:刷新子scope的时候,也会刷新父scope;反之亦然
最近在开发项目的时候,发现了AngularJS一个很好玩的特性。我们知道AngularJS的scope存在父子关系,当我们通过scope.$apply()手动刷新子作用域的时候,父作用域也会被刷新;反过来也是如此。
2016-05-18 17:00:48 3628
原创 ionic版本从v1.0.0升级到v1.2.4后,android上使用<ion-content>的页面无法滑动
ionic版本从v1.0.0升级到v1.2.4后,android上使用<ion-content>的页面无法滑动
2016-04-27 16:45:44 2690
原创 混合app开发:自己实现的页面历史记录管理模块,解决页面"回退难"的问题
页面历史记录管理,其实和浏览器自带的前进和后退按钮很类似,就是为了保证在某个页面点击返回键的时候,能够正确地返回用户想要回到的上一个页面。对于浏览器来说,如果我们依次打开页面A-->B-->C-->D,我们在D页面点浏览器的回退是回到C页面,C回到B,B回到A。但是对于一个业务系统来说,这种返回逻辑太简单了,不能满足一些特点场景的使用。比如我们的混合app主页是A(任务列表页面,一条一条的任务),我们点击列表的某一条数据后,会跳转到B(router页面,用户不可见),B页面会根据一些条件跳转到C或者D等页面
2016-03-19 16:59:38 2992 1
原创 使用ionic框架的<ion-scroll>进行水平滚动时,导致页面难以上下滑动的解决方案
但是我们项目中遇到一个问题:一个页面很大,有多个画廊控件,我们的页面很难上下滑动,滑动非常吃力,这是为什么呢?举个例子:如果你的页面放的全都是input输入控件,那么这个页面一样很难滑动,因为当我们在手机屏幕上滑动的时候,一不小心很容易就会点中这些输入框,当输入框获得焦点,页面就不能滑动了。使用<ion-scroll>一样有这个问题,当页面全是画廊控件的时候,滑动也十分费劲。从ionic文档中也没有找到好的解决办法,最后解决方法是:不使用<ion-scroll>指令,自己实现左右滑动。利用HTML5中的to
2016-03-17 11:35:59 21549 5
原创 如何配置tomcat数据源以及Cannot create JDBC driver of class '' for connect URL 'null'
解决tomcat数据源错误:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
2016-03-16 14:46:26 10876 1
原创 ionic组件popover的scope继承问题
很显然我们希望这几个popover之间不要相互干扰,这个很容易,因为每次调用fromTemplateUrl打开新的popover时候都会新建一个scope,彼此之间自然是隔离的。由于这几个popover很类似,自然也有一些公共操作。所以我们可以:将公共的属性和方法放在parent scope中,需要彼此隔离的数据放在child scope中。
2016-03-08 09:29:04 2160
原创 了解java的序列化与反序列化
序列化是一种对象持久化的手段,普遍应用在网络传输、RMI等场景中。一个Java类必须实现java.io.Serializable接口,这个类的对象才可以被序列化。之后我们可以通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化。在序列化和反序列化的过程中,类不仅路径要完全一致,serialVersionUID也必需相同。在进行反序列化的时候,并没有调用类的构造方法,而是直接根据他们的序列化数据在内存中创建新的对象。
2016-03-04 16:15:16 790
原创 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
AOP大家都不陌生,它是一种编程理念,一种规范,有很多的实现者如Spring AOP,JBoss AOP,还有我们今天要讲的AspectJ。我们平时项目用到最多的是Spring AOP,它是用纯Java实现的,不需要专门的编译过程,不需要特殊的类加载器,它在运行期通过JDK动态代理或者Cglib动态代理的方式向目标类织入增强代码。而AspectJ是语言级的AOP实现,它定义了自己的AOP语法和专门的编译期用来生成符合java字节码规范的class文件。
2016-03-01 10:45:28 9256 1
原创 二叉树遍历问题:已知中序遍历和后序遍历结果,求前序遍历结果
二叉树前序遍历规则是:根、左子树、右子树;中序遍历规则是:左子树、根、右子树;后序遍历规则是:左子树、右子树、根。
2016-02-29 09:58:28 3625
原创 ionic框架popover组件<ion-popover-view>的滚动问题
之前的这篇博客"通过项目中定位的一个问题:学习ionic框架$ionicPopover的使用以及注意事项"介绍了popover组件的基本使用,可以参考这篇文章学习下popover组件的使用。最近项目发现了一个新问题:当popover下面放置很多按钮的时候,手机端上不能显示全部按钮,而且不能滑动。解决方案1:使用<ion-content>;方案2:使用<ion-scroll>
2016-02-27 17:46:50 4523
原创 再谈spring mvc中的root/child WebApplicationContext
spring mvc只拦截特定路径的url,项目还提供了一个外部的servlet,给别的子系统调用,这个servlet不在spring mvc拦截路径范围内。我们在这个servlet里面不能获取到spring mvc的WebApplicationContext。我猜测原因是:我们的请求没有经过spring拦截,spring没有将child WebApplicationContext塞入到request对象中。目前没有想到特别好的解决方式,使用了spring框架的ApplicationContextAware
2016-02-15 17:02:02 1094
原创 spring websocket stomp如何向服务端传递参数
html页面中通过stomp给服务端传递参数有2种方式:在消息头中添加参数,使用使用@Header或者@Headers接收;在路径中添加参数,使用@DestinationVariable接收。
2016-02-15 09:43:18 15731
原创 spring配置文件中<bean>的id和name属性区别,以及identifier和aliases
标识符和别名没有任何区别,所以id和name属性唯一的差别在于:id只能设置一个标识符,而name可以设置多个标识符separated by a comma (,), semicolon (;), or white space。
2016-02-03 15:50:00 8018
原创 spring xml读取Properties文件中的加密字段
使用PropertyPlaceholderConfigurer读取properties文件,继承PropertyPlaceholderConfigurer实现properties文件中字段值的解密
2016-01-28 16:29:50 3908
原创 maven打包:将webapp下的classes文件打包到单独的jar包中
maven web工程打包默认情况下,会将编译后的class文件放到WEB-INF/classes文件夹下,如果你不想将class文件放到这个位置,而是作为一个单独的jar放到WEB-INF/lib下,那么可以使用如下的配置。
2016-01-26 11:00:15 5201
原创 使用spring websocket stomp遇到的3个问题总结:路径匹配/自动注入/activemq连接超时
之前的这篇博客,详细地描述了如何搭建一个spring websocket工程,经过后面的实践发现了3个问题,这里总结下。1.我们spring mvc的servlet拦截的是/*,这个范围太大,能不能只拦截特定更具体的url?2.我们使用SimpMessagingTemplate发送消息,这个bean到底是谁帮我们注入的?我们并没有显示地配置这个bean,也没有扫描某个目录,但显然这个bean是确确实实存在的。3.我们的页面挂一阶段,发现浏览器控制台和activemq后台报错了,这个时候不能再发送和接收
2016-01-25 19:05:23 18798 4
原创 spring websocket stomp 连接开启了用户名和密码认证的ActiveMQ
spring websocket stomp连接开启了用户名和密码认证的activeMQ,必需同时设置system-login和client-login的用户名和密码
2016-01-25 15:13:15 6518
原创 spring mvc里的root/child WebApplicationContext的关系
spring mvc程序里会有两个WebApplicationContext,一个是parent,从applicationContext.xml里加载的,一个是child,从servlet-context.xml里加载的。 两者是继承关系,child WebApplicationContext 可以通过getParent()函数获取到root WebApplicationContext。
2016-01-22 17:31:45 2847
原创 搭建Spring4.1与Spring4.2 websock+stomp+activeMQ需要注意事项:spring4不同版本websocket差异
报错原因是:spring4.2.4版本使用的是reactor-net-2.0.7.RELEASE,但是spring4.1.4版本不能使用这个版本。下面源码是4.1.4版本的,需要reactor.io.encoding.Codec这个类,而这个类在reactor-core-2.0.7.RELEASE中删除了,但是reactor-core-1.1.6.RELEASE中有这个类。
2016-01-21 19:05:34 3411
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人