<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[禤永豪]]></title><description><![CDATA[热爱编程热爱生活]]></description><link>https://blog.youkuaiyun.com/xuanyonghao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xuanyonghao]]></copyright><item><title><![CDATA[MongoDB上MapReduce的实现以及项目实例探索]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/79044741</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/79044741</guid><author>xuanyonghao</author><pubDate>Fri, 12 Jan 2018 15:35:46 +0800</pubDate><description><![CDATA[0x01 数据存储结构

前段时间发现公司原来的一个业务，使用mysql分月创建表记录用户登陆记录信息，在表数量达到千万级后，查询变得超级慢，并且时不时的卡死终端，为了解决这个问题，没有选择花大力气去优化，而是选择了使用MongoDB数据库去存储，记过几个月的数据存储，数据量早已达到五千万级别，但查询速度依然很快。

MongoDB存储了大量的用户登录记录，文档结构如下：

{
  "_id" :]]></description><category></category></item><item><title><![CDATA[细说在一次中间件开发中如何实现每次业务调用的唯一标识之流水号生成以及应用]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/79033021</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/79033021</guid><author>xuanyonghao</author><pubDate>Thu, 11 Jan 2018 13:19:20 +0800</pubDate><description><![CDATA[在web系统中，谁也不能保证每一次的业务调用都能正常的执行，在这样的情况下，我们该如何去处理？

如果能保证每一次的业务调用的结果都持久化到数据库，而出现异常后，能根据数据库记录去检索日志文件，定位到异常信息，进而分析异常快速找到异常产生原因，我觉得这是一个很好的处理方案，核心是确保每一次义务调用都可追溯。

由于前段时间工作需要，写了一个消息推送的中间件，其中业务涉及到上述问题和解决方案，所以特]]></description><category></category></item><item><title><![CDATA[spring上使用mybatis快速生成插件快速生成xml、model、mapper]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/77058006</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/77058006</guid><author>xuanyonghao</author><pubDate>Thu, 10 Aug 2017 16:23:50 +0800</pubDate><description><![CDATA[你是否厌倦了每次用mybatis都要写一大堆配置文件？是否厌倦每一个sql操作都要写一大堆东西？好，厌倦就对了，这里献上快速生成方法。首先数据库得先来一个。一、建库建表
  id
  name
  age  1342424252353
  xyh
  22
create database testDB;
use testDB;
create table test(id varchar(20) pri]]></description><category></category></item><item><title><![CDATA[在Spring项目中集成使用dubbo实现分布式服务]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76977088</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76977088</guid><author>xuanyonghao</author><pubDate>Wed, 09 Aug 2017 11:30:31 +0800</pubDate><description><![CDATA[一、配置启动ZookeeperZooKeeper是一个分布式的，开放源码的分布式应用程序协调服务，是Google的Chubby一个开源的实现，是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件，提供的功能包括：配置维护、域名服务、分布式同步、组服务等。下载http://www-eu.apache.org/dist/zookeeper/配置Zookeeper安装目录的con]]></description><category></category></item><item><title><![CDATA[在Spring项目中集成使用MongoDB]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76976149</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76976149</guid><author>xuanyonghao</author><pubDate>Wed, 09 Aug 2017 11:19:22 +0800</pubDate><description><![CDATA[这里使用的是maven工程，所以依赖jar包都是pom.xml配置型式。pom.xml引入依赖<properties>
    <spring.version>4.3.5.RELEASE</spring.version>
</properties>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId]]></description><category></category></item><item><title><![CDATA[MongoDB菜鸟入门（三）：创建用户使用鉴权、使用聚合aggregate]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76955176</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76955176</guid><author>xuanyonghao</author><pubDate>Wed, 09 Aug 2017 09:42:54 +0800</pubDate><description><![CDATA[一、创建用户


创建管理员账户


//以--auth启动数据库服务器
mongod --dbpath=C:\data\shard\test --port 27000 --auth
//以admin登录且切换到admin数据库
mongo admin --port 27000
//创建管理员
db.createUser({user:"root",pwd:"12345",roles:["userA]]></description><category></category></item><item><title><![CDATA[MongoDB菜鸟入门（二）：使用分片和主从副本实行高性能髙可靠数据库]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76713840</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76713840</guid><author>xuanyonghao</author><pubDate>Sat, 05 Aug 2017 11:30:22 +0800</pubDate><description><![CDATA[上一篇简单的记录了一下本人的学习笔记，下面描述的是如何配置分片和主从副本集。一、分片
由于使用一些传统的数据库（例：mysql等）数据存储量一旦达到某种程度后，查询操作可能会非常耗时，而使用某些内存数据库（例：redis等）则受内存空间大小的限制。而使用mongodb分布式数据库则可以解决此些问题。
此处笔记记录了我个人使用了两个分片实践，由于没有更多的机器，此处仅使用单台主机实践。
分片1（sha]]></description><category></category></item><item><title><![CDATA[MongoDB菜鸟入门（一）：概念与增删改查、建立索引]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76711051</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76711051</guid><author>xuanyonghao</author><pubDate>Sat, 05 Aug 2017 11:06:21 +0800</pubDate><description><![CDATA[一、启动指定–dbpath为存储文件夹，使用默认端口启动mongod.exe --dbpath c:\data\db二、windows添加服务若要把mongodb设定为windows服务mongod.exe --bind_ip yourIPadress --logpath "C:\data\dbConf\mongodb.log" --logappend --dbpath "C:\data\db" -]]></description><category></category></item><item><title><![CDATA[mysql数据库上使用定时器定时执行存储过程建表（月表）]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76407720</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76407720</guid><author>xuanyonghao</author><pubDate>Sun, 30 Jul 2017 21:41:34 +0800</pubDate><description><![CDATA[最近有个需求，在mysql数据库中每个月建自动一个表，把该月的数据存储到该月对应的表中。一、创建存储过程期望表名： 
login_history_2017_07（login_history_YYYY_MM） 
字段： 
id （int(11) primary key auto_increment） 
uid （char(10) not null） 
ip （char(200) not null）DE]]></description><category></category></item><item><title><![CDATA[在spring使用activeMQ订阅多个topic并实现监听器监听]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/76407472</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/76407472</guid><author>xuanyonghao</author><pubDate>Sun, 30 Jul 2017 21:16:00 +0800</pubDate><description><![CDATA[最近有个需求，在spring上集成activeMQ且订阅多个topic，并且需要实现监听器监听多个topic。一、maven依赖配置pom.xml<!-- activemq -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4]]></description><category></category></item><item><title><![CDATA[继承LinkedHashMap实现自定义HashMap设定条件触发删除eldest元素]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/75249422</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/75249422</guid><author>xuanyonghao</author><pubDate>Mon, 17 Jul 2017 16:08:43 +0800</pubDate><description><![CDATA[分析LinkedHashMapLinkedHashMap是继承HashMap的一个子类，除了包含HashMap的方法外，还提供了removeEldestEntry方法，该方法在源码中实现：protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
    return false;
}该方法好像没什么作用，先不要这么快急着下结论，让我们先]]></description><category></category></item><item><title><![CDATA[探究java中String.replaceAll方法把换行符(\n)替换为明文显示(\n)为何需要四个反斜杠(\\\\n)]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/75053469</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/75053469</guid><author>xuanyonghao</author><pubDate>Thu, 13 Jul 2017 14:22:20 +0800</pubDate><description><![CDATA[最近需要解析一个JSONArray类型的字符串[{"key":"姓名","value":"XX"},{"key":"资质","value":"从事贵金属投资行业10年
国家期货二级分析师
上金所荣誉长老"},{"key":"其他","value":""}]在key资质对应的value中包含三条分行显示的信息，那么坑就来了，当JSON解析遇到\n（换行）就会抛出异常，那怎么办？ 
还好，想到了一个对策]]></description><category></category></item><item><title><![CDATA[Spring上设置mysql数据源动态切换（master写、slaver读）]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/75007539</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/75007539</guid><author>xuanyonghao</author><pubDate>Wed, 12 Jul 2017 11:30:37 +0800</pubDate><description><![CDATA[一般情况下，很多项目（spring）由于对数据库（mysql）的并发量上来之后，都会配置主从机数据库，写数据使用主机数据库，而读数据使用从机数据库。那么如何使得对主从机数据源的使用能动态根据业务切换？一、一些配置和依赖1、一些需要的jar包由于我这边使用了maven，也用到了aspect、mysql，so附上maven依赖，方便copy。<properties>
    <spring.versio]]></description><category></category></item><item><title><![CDATA[在Spring上集成使用ehcache缓存框架以及实现集群缓存同步]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/73928864</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/73928864</guid><author>xuanyonghao</author><pubDate>Thu, 29 Jun 2017 22:38:58 +0800</pubDate><description><![CDATA[周一第一天实习，老大给了个任务给我，让我看看j2cache两级缓存框架，然后我在开源中国了解到，开源中国目前就用到这个缓存框架，主要是为了减少redis的负荷，这个两级缓存框架使用了ehcache作为一级L1缓存，使用redis作为二级L2缓存，了解到这个之后，我果断学习了一波ehcache在spring的使用。一、依赖jar包这里使用maven：<properties>
    <spring.v]]></description><category></category></item><item><title><![CDATA[实现SpringMVC中使用@Responsebody注解返回任意POJO对象转换成JSON]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/73928497</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/73928497</guid><author>xuanyonghao</author><pubDate>Thu, 29 Jun 2017 21:55:19 +0800</pubDate><description><![CDATA[最近去实习，在第三天老大终于给个项目源码来学习学习了，很难得，然后在阅读源码过程中，发现了很多值得学习的东西，比如一些规范、面向对象设计、框架使用等。 
以前以为SpringMVC中使用@Responsebody注解后，只能返回JSONObject，今天让我学到很多东西，原来只要是对象都能返回，只是我们需要把对象转换成JSON类型的字符串。一、核心依赖jar包：我这里使用的是maven，so附上ma]]></description><category></category></item><item><title><![CDATA[Android自动化测试uiautomator入门]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/72847486</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/72847486</guid><author>xuanyonghao</author><pubDate>Fri, 02 Jun 2017 20:23:57 +0800</pubDate><description><![CDATA[一、准备jar包在sdk的platforms子目录下找到对应android系统版本的sdk，我这里模拟器中启动的是android4.4.2，所以我选择的是android-19，取得该目录下的两个jar包1、android.jar2、uiautomator.jar二、创建java project打开eclipse，新建java project，把上一步中取得的jar包添加到依赖。 
新建一个packa]]></description><category></category></item><item><title><![CDATA[如何在linux(ubuntu)上使用java的jni]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/72365824</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/72365824</guid><author>xuanyonghao</author><pubDate>Wed, 17 May 2017 11:30:11 +0800</pubDate><description><![CDATA[最近发现java可运行代码太容易被反编译,想到java的jni,jni是Java Native Interface的缩写，它提供了若干的API实现了Java和其他语言的通信（主要是C&C++）。一、编写java代码
JNIDemo.java 
我们这里仅以一个最经典的helloworld来展示
public class JNIDemo {
        static{]]></description><category></category></item><item><title><![CDATA[如何安装nginx且使用反向代理]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/71891967</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/71891967</guid><author>xuanyonghao</author><pubDate>Sat, 13 May 2017 20:24:49 +0800</pubDate><description><![CDATA[最近有朋友问我借了云服务器，并在服务器安装了tomcat，由于我的服务器原本也存在正在服务的tomcat，尴尬啊两个tomcat，为了我们的web应用都能在80端口被访问，我使用了nginx反向代理。一、安装必备组件1、PCRE(Perl Compatible Regular Expressions)是一个Perl库，包括 perl 兼容的正则表达式库。 
 访问http://www.pcre.or]]></description><category></category></item><item><title><![CDATA[如何在Spring项目中使用Mybatis]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/71773954</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/71773954</guid><author>xuanyonghao</author><pubDate>Fri, 12 May 2017 22:19:23 +0800</pubDate><description><![CDATA[warning：下面一切的内容必需基于你的spring能正常使用，不能使用的你还是先不要看。。。zzz一、准备工作
jar包下载 
mybatis-3.4.4.jar 
mybatis-spring-1.3.1.jar 
spring-jdbc-4.2.4.RELEASE.jar 
mysql-connector-Java-5.1.10.jar（由于我这里使用mysql为例） 
spring-tx-]]></description><category></category></item><item><title><![CDATA[html中使用Ajax与后台接口api交互(以登录功能为例)]]></title><link>https://blog.youkuaiyun.com/xuanyonghao/article/details/65936045</link><guid>https://blog.youkuaiyun.com/xuanyonghao/article/details/65936045</guid><author>xuanyonghao</author><pubDate>Sat, 25 Mar 2017 12:55:50 +0800</pubDate><description><![CDATA[一、查阅开发文档首先，要做这个功能前，我们必须先查阅后台接口文档，了解使用登录接口时，需要提交哪些参数，并且接口使用返回的数据。 
这里我使用了一个返回json格式数据的登录接口为例，讲解怎么使用Ajax与后台接口交互。由上图开发文档里，我们可以清楚的知道，要使用这个登录接口，我们只需要提交账号adminName和密码pwd两个参数。二、编写javascript(Ajax)实现登录
var xmlh]]></description><category></category></item></channel></rss>