最近有个项目需求:kafka监听MySQL某个表,比如goods表。如果goods表某些字段(比如商品名称和商品id)发生变化,则向rabbitMQ发送消息,通知某些关注项目该goods表发生变化。
1.分析
某些关注字段(商品名称和商品id)发生变化,我们可以将这些发生变化的字段单独写成一个类,然后将关注字段类转换为JSON,比较发生变化前后的JSON,如果一样,说明是非关注字段发生变化。如果不一样,则是关注字段发生变化,则向MQ发送消息。
2.代码
此篇文章只写JAVA对象转为JSON的代码。
public static String ObjectToJson(Object OiObj) throws Exception {
// 属性和属性值的拼接
java.lang.String nFieldAndValue = "{";
// 解析后的属性
java.lang.String nField = "";
// 解析后的属性值
java.lang.String nValue = "";
// 1.得到实体的所有属性数组
java.lang.reflect.Field[] fields = OiObj.getClass().getDeclaredFields();
// 2.循环取出属性
for (java.lang.reflect.Field field : fields) {
// 2.1设置些属性是可以访问的
field.setAccessible(true);
// 2.2得到字段
nField = field.getName();
// 2.3得到字段值
nValue = (field.get(OiObj)) + "";
// 2.4拼接属性和属性值
if (nValue != null) {
nFieldAndValue += "\"" + nField + "\":\"" + nValue + "\"" + ",";
}
}
// 3.返回时去掉最后面的逗号
return nFieldAndValue.substring(0, nFieldAndValue.length() - 1) + "}";
}