Skip to content

Instantly share code, notes, and snippets.

BeanUtils.copyProperties方法问题

之前使用流式build模式来创建bean对象,但是在使用BeanUtils.copyProperties方法时出现异常。
查看此方法的源码发现,此方法会对源对象和目的对象做一次可读可写判断:

getPropertyUtils().isReadable(orig, name) && getPropertyUtils().isWriteable(dest, name)

如果操作的对象不符合JAVA BEAN规范,就会返回false.

OOZIE JOB僵死问题

通过oozie job -kill XXXX,无法将其杀死,然后将oozie重新启动,重启之后发现该workflow仍然僵死,显示处于running状态,猜想应该是oozie所对应的数据库中存有该wf的状态信息,于是想去数据库中将此wf的信息删除,进入数据库中发现无法查询数据库表,原来是表被lock,原因找到,于是重启mysql服务,再重启oozie,一切ok
重启hadoop job
重启oozie
hadoop-daemons.sh start jobtracker

启动脚本 脚本说明

start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack

Check_mysql_health安装

wget包,解压,安装
####出现的问题 DBI.pm找不到
解决方式:执行perl进行安装

perl -MCPAN -e shell

install DBI

Apache+PHP+Nagios安装

由于用户权限的限制,所以采用手动编译,如果具有root权限的话可以直接下载XAMPP包 ####编译Apache Httpd 去官网下载安装包、解压
容易产生的问题是配置的时候提示缺少APR、APR-UTIL、PCRE 的lib,这个要手动下载,最新的httpd-2.4.10,直接将下载解压后的APR、APR-UTIL 分别放到httpd-2.4.10(源包)的srclib的apr、apr-util下,编译pcre到指定位置,然后再编译httpd,如下:

./configuration --prefix=/home/.../httpd-2.4.10 --with-pcre=/home/.../pcre/

####编译PHP

Hession超时控制

设置hession调用超时的配置如下(默认为20秒,可根据业务场景自己调整):

<bean id="gateConfigFacade" class="org.springframework.remoting.caucho.HessianProxyFactoryBean" lazy-init="true" >
    <property name="serviceUrl" value="${mvn.config.url}/gateConfigFacade" />
    <property name="serviceInterface" value="com.changyou.npt.config.facade.gate.GateConfigFacade" />
    <property name="proxyFactory">
        <bean class="com.caucho.hessian.client.HessianProxyFactory" p:hessian2Request="true" p:readTimeout="20000" p:connectTimeout="20000" p:hessian2Reply="true" />

Mybatis动态生成表字段

mybatis中一个属性:statementType。
这个属性的作用是告诉mybatis我们写的这个sql到底是预编译(PRESTATEMENT)还是非预编译(STATEMENT)的。
有什么区别呢?如果是预编译的,那么系统在初始化时就会读取这段sql代码,将指定的实体类中的字段替换了类似#{}这样的语句,就是形成了类似这样的语句:

select * from tableName where code=? 

Spring事务自身调用

####场景 对象调用自身具有事务传播的方法,同时使事务有效。 ####解决方法 使用AopContext.currentProxy()获取此类的AOP代理对象,用代理对象调用自身方法。注意,使用此解决方式,在spring配置文件的aop配置要添加expose-proxy="true"。 ####代码实现 Spring相关配置:<aop:aspectj-autoproxy proxy-target- expose-proxy="true"/> ####业务代码 在deliverItemAsyncCallback方法中调用deliverCallBackBusiness方法,并且使其事务有效。

Hessian序列化Hibernate的延迟加载Set等集合问题

将原有的RMI服务调用的权限控制系统改写成Hession服务调用时,遇到了LazyInitializationException异常。此权限系统用的是ORM框架,分析产生此问题的原因是Hessian序列化对象时,此对象中包含Hibernate的集合映射,此时Hibernate的session已经关闭。<br / > 解决方法
针对Hibernate的PersistentCollection订制一个Serializer。
实现: 继承AbastractSerializer,重写WriteObject方法,再重写SerializerFactory,当对Hibernate 集合进行序列化的时候,使用定制化的序列化Class。

import com.caucho.hessian.io.AbstractHessianOutput;
import com.caucho.hessian.io.AbstractSerializer;

import com.caucho.hessian.io.CollectionSerializer;

Logstash+Redis+Elasticsearch+Kibana日志监控报警系统

@(服务监控)[logstash|Elasticsearch|kibana]

工具介绍

Logstash:用于收集、处理、传输日志数据。
Redis:用于实时标识和传输日志数据。
Elasticsearch:用于实时查询和解析数据。
Kibana:用于数据可视化。

工作流程

分布式系统数据一致性处理

@(系统架构)[分布式] ####架构 讲这之前先说一下我们的系统架构,整个电商平台分为商品系统、交易系统、资金系统、游戏通信系统,个系统之间通过Hessian服务调用。业务流程是游戏通过通信系统上架商品,商品系统处理商品,用户下单通过交易系统,用户支付订单时,交易系统调用资金系统,用户支付成功后,资金系统同步和异步回调支付结果。若支付成功,交易系统通知通信系统给买家发货,并通知商品系统,该商品已成功售出。 ####问题 由于是系统间服务调用,不能保证两服务之间的数据处理时一致的。拿下单举例,用户下单,交易系统通知商品系统减库存,如果减库存成功,但订单生成失败,此时就会出现数据不一致的情况:没有生成有效的订单,但是已经减库存了。

解决方式

我们并没有采用分布式事务管理框架,而是采用幂等性记录表进行处理的。
幂等性:服务多次调用不会影响预期结果。