<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Java_Mrsun的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Java_Mrsun</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Java_Mrsun]]></copyright><item><title><![CDATA[Spring属性拦截器@InitBinder搭配@RequestBody使用]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/105662417</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/105662417</guid><author>Java_Mrsun</author><pubDate>Tue, 21 Apr 2020 17:07:12 +0800</pubDate><description><![CDATA[前言：

Spring属性拦截器@InitBinder搭配@RequestBody使用，导致dto内属性拦截不到的问题。

查找了许多文档，发现原文里面说了，用@RequestBody注释的的确不生效，但我们又有这个需求，怎么办呢，经过我研究，阅读源码之后决定用反射来实现一些我们需要的功能，写到最后发现可以用拦截器或者aop实现有可能会更简单一点，但还是记录一下吧，给大家参考，把代码贴出来，大家一...]]></description><category></category></item><item><title><![CDATA[spring cloud 二刷总结摘抄记录]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/91871045</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/91871045</guid><author>Java_Mrsun</author><pubDate>Thu, 13 Jun 2019 16:16:30 +0800</pubDate><description><![CDATA[Spring Cloud是一个基于Spring Boot实现的云应用开发工具，它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud包含了多个子项目（针对分布式系统中涉及的多个不同开源产品），比如：Spring Cloud Config、Spring Cloud...]]></description><category></category></item><item><title><![CDATA[POST请求https遇到unable to find valid certification path to requested target]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/90485530</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/90485530</guid><author>Java_Mrsun</author><pubDate>Thu, 23 May 2019 18:17:33 +0800</pubDate><description><![CDATA[完整异常信息为：

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid ce...]]></description><category></category></item><item><title><![CDATA[线程学习4：join方法的使用]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88745187</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88745187</guid><author>Java_Mrsun</author><pubDate>Fri, 22 Mar 2019 16:52:58 +0800</pubDate><description><![CDATA[package com.research;

/**
 * join方法
 * 原理：
 * 从源码中可以看到：join方法的原理就是调用相应线程的wait方法进行等待操作的，
 * 例如A线程中调用了B线程的join方法，则相当于在A线程中调用了B线程的wait方法，
 * 当B线程执行完（或者到达等待时间），B线程会自动调用自身的notifyAll方法唤醒A线程，
 * 从而达到同步...]]></description><category></category></item><item><title><![CDATA[线程学习3：ThreadGroup线程组]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88744476</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88744476</guid><author>Java_Mrsun</author><pubDate>Fri, 22 Mar 2019 16:30:49 +0800</pubDate><description><![CDATA[package com.research;

/**
 * 线程组
 * ①定义线程组
 * ThreadGroup类中有 2个构造方法，它们用来定义线程组。这 2个构造方法的使用格 式如下：
 *     public ThreadGroup（String name）;
 *     public ThreadGroup（ThreadGroup parent，String name）；...]]></description><category></category></item><item><title><![CDATA[线程学习2：带返回值的线程Callable和FutureTask]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88744307</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88744307</guid><author>Java_Mrsun</author><pubDate>Fri, 22 Mar 2019 16:26:09 +0800</pubDate><description><![CDATA[package com.research;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent....]]></description><category></category></item><item><title><![CDATA[线程学习1：ThreadLocal的使用]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88691106</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88691106</guid><author>Java_Mrsun</author><pubDate>Fri, 22 Mar 2019 16:23:34 +0800</pubDate><description><![CDATA[线程局部变量；对于多线程资源共享的问题，同步机制采用了“以时间换空间”的方式，而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量，让不同的线程排队访问，而后者为每一个线程都提供了一份变量，因此可以同时访问而互不影响。

栗子：



结果：



可以看到输出的线程顺序并非最初定义线程的顺序，理论上可以说明多线程应当是并发执行的，但是依然可以保持每个线程里面的值是对应的，说明...]]></description><category></category></item><item><title><![CDATA[stripe国际支付（对接支付宝、微信）]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88393871</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88393871</guid><author>Java_Mrsun</author><pubDate>Mon, 11 Mar 2019 15:18:59 +0800</pubDate><description><![CDATA[前言：stripe国际支付现在网上资料很少，且不支持中国，所以如果要用需要去支持的国家注册商户，官网的java demo是用的spark框架，我这里用的spring，验签需要手动验签，且不能用官网的方法

正文：

支付宝文档地址：https://stripe.com/docs/sources/alipay

微信支付文档地址：https://stripe.com/docs/sources/wec...]]></description><category></category></item><item><title><![CDATA[支付宝APP支付]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88389028</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88389028</guid><author>Java_Mrsun</author><pubDate>Mon, 11 Mar 2019 10:20:10 +0800</pubDate><description><![CDATA[支付宝支付和微信支付一样，后端只需要关心三个接口，其他的交给前端，前端集成sdk去操作

https://docs.open.alipay.com/204




&amp;lt;!-- 支付宝支付官方SDK --&amp;gt;
&amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;com.alipay.sdk&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;al...]]></description><category></category></item><item><title><![CDATA[微信APP支付]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/88388557</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/88388557</guid><author>Java_Mrsun</author><pubDate>Mon, 11 Mar 2019 10:15:33 +0800</pubDate><description><![CDATA[前言：最近公司接了个商城项目，被分到了做微信支付，支付宝支付和stripe国际支付，在此记录一下。

正文：

  微信支付接入方式分很多种如下：





比如h5，大部分业务几乎都在后台，而app支付一半在前端一半在后端，我这里讲的是app支付

官方说明文档地址：https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1...]]></description><category></category></item><item><title><![CDATA[使用切面AOP实现全局乐观锁]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85710376</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85710376</guid><author>Java_Mrsun</author><pubDate>Thu, 03 Jan 2019 18:28:52 +0800</pubDate><description><![CDATA[最近项目需要版本号乐观锁，但发现每个需要加锁的地方都要做处理发现很繁琐很臃肿，所以使用aop切面+自定义注解来抽取实现乐观锁。

第一步使用@Aspect需要pom引入


			
&lt;!--使用AspectJ方式注解需要相应的包--&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.aspectj&lt;/groupId&gt;
    &lt;ar...]]></description><category></category></item><item><title><![CDATA[百万级数据EXCEL导出--easyexcel]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85678028</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85678028</guid><author>Java_Mrsun</author><pubDate>Thu, 03 Jan 2019 10:06:51 +0800</pubDate><description><![CDATA[easyexcel 项目git地址为: https://github.com/alibaba/easyexcel
官方使用指南见: https://github.com/alibaba/easyexcel/blob/master/quickstart.md

官方介绍：Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存，poi有一套...]]></description><category></category></item><item><title><![CDATA[WebMagic爬虫（二）升级版]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85090431</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85090431</guid><author>Java_Mrsun</author><pubDate>Wed, 19 Dec 2018 11:09:26 +0800</pubDate><description><![CDATA[我在爬取页面的时候发现有很多数据是js渲染进去的，通过：

String htm = page.getHtml().xpath(&quot;*/html/html()&quot;).toString();

page.putField(&quot;html&quot;,htm);

就可以看到爬取下来的页面数据，可以很清晰的看出页面里面有没有自己想要的数据，如果没有，那么我们就需要进一步操作！

如果数据是ajax请求过来的，那么可以参...]]></description><category></category></item><item><title><![CDATA[WebMagic爬虫（一）基础版]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85053059</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85053059</guid><author>Java_Mrsun</author><pubDate>Wed, 19 Dec 2018 10:36:31 +0800</pubDate><description><![CDATA[WebMagic是码云上面一个很热门的爬虫框架，非常好用便捷

地址：https://gitee.com/flashsword20/webmagic  感谢作者

爬取一个页面的时候，有些网站会通过js渲染或者通过ajax渲染，普通的无渲染就可加载出来的页面此篇文件介绍，通过js简单渲染处理的数据下篇文章，要是用户想爬取ajax渲染出来的数据，请参考WebMagic文档作者介绍的方法：http:/...]]></description><category></category></item><item><title><![CDATA[for循环中控制事务单个提交问题]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85062675</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85062675</guid><author>Java_Mrsun</author><pubDate>Tue, 18 Dec 2018 11:52:29 +0800</pubDate><description><![CDATA[最近有个业务是for循环里面，循环一次业务提交一次，过程中发现事务不能提交，总结一下这个问题

第一点：

我用的是通用mapper，用到他的updateByPrimaryKeySelective方法，这个方法必须设置主键，不然他的where后面会带上所有字段造成sql错误

第二点：

用spring来做声明式事务的话,方法直接调用内部方法是不会走到代理类的，也就是不会走到切面,所以@Trans...]]></description><category></category></item><item><title><![CDATA[通过url下载图片到本地]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/85046988</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/85046988</guid><author>Java_Mrsun</author><pubDate>Mon, 17 Dec 2018 11:30:59 +0800</pubDate><description><![CDATA[
/**
 * 文件或文件夹不存在则创建
 * @param dir 文件夹
 * @param filepath 文件名
 */
public static void createDirFile(String dir){
   File file = new File(dir);
   if(!file.exists()){
      file.mkdirs();
   }
}




/**...]]></description><category></category></item><item><title><![CDATA[springboot返回值国际化处理]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/84872074</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/84872074</guid><author>Java_Mrsun</author><pubDate>Fri, 07 Dec 2018 11:35:58 +0800</pubDate><description><![CDATA[一：启动类内配置



二：国际化文件





三，拦截器


			
package com.otcbi;

import com.otcbi.common.dto.OperateResult;
import com.otcbi.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...]]></description><category></category></item><item><title><![CDATA[mysql 事务没提交锁表解决方案]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/84833310</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/84833310</guid><author>Java_Mrsun</author><pubDate>Wed, 05 Dec 2018 13:56:14 +0800</pubDate><description><![CDATA[select * from information_schema.innodb_trx；
查看堵塞的线程，直接kill  trx_mysql_thread_id这个id]]></description><category></category></item><item><title><![CDATA[热部署插件jrebel]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/84108809</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/84108809</guid><author>Java_Mrsun</author><pubDate>Thu, 15 Nov 2018 18:21:30 +0800</pubDate><description><![CDATA[近乎无感的热部署，不用频繁启动服务，可以说是爽歪歪，以下为springboot的方式使用jrebel

安装：



激活后设置成离线模式

2019年五月十四重新上一下线就行，激活链接从某包几块钱买的，买个方便



启动



修改某个文件出现：



应用成果...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成Swagger2]]></title><link>https://blog.csdn.net/Java_Mrsun/article/details/83749575</link><guid>https://blog.csdn.net/Java_Mrsun/article/details/83749575</guid><author>Java_Mrsun</author><pubDate>Mon, 05 Nov 2018 14:53:57 +0800</pubDate><description><![CDATA[Swagger2是一款RESTFUL接口在线生成工具，对于我们开发非常方便

第一笔引入pom：


			
&amp;lt;!-- swagger2 --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;io.springfox&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;springfox-swagger2&amp;lt;/artifactI...]]></description><category></category></item></channel></rss>