<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaogc_a的博客]]></title><description><![CDATA[不忘初心-持之以恒]]></description><link>https://blog.youkuaiyun.com/xiaogc_a</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaogc_a]]></copyright><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/155980843</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/155980843</guid><author>xiaogc_a</author><pubDate>Tue, 16 Dec 2025 14:19:54 +0800</pubDate><description><![CDATA[本文档介绍Spring Boot配置文件密码加密方案。使用jasypt-spring-boot-starter实现加密功能，通过设置环境变量JASYPT_ENCRYPTOR_PASSWORD作为密钥。提供测试接口生成加密密文，将返回结果用ENC()包装替换明文密码。验证内容包括应用启动、数据库连接、Redis连接和监控页面访问等。该方案可有效保护配置文件中的敏感信息，降低泄露风险，符合安全规范要求。]]></description><category></category></item><item><title><![CDATA[通过自定义注解对请求参数中的日期做格式校验]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/108600118</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/108600118</guid><author>xiaogc_a</author><pubDate>Tue, 15 Sep 2020 15:13:49 +0800</pubDate><description><![CDATA[通过自定义注解对请求参数中的日期做格式校验

只需新增两个类


自定义注解类

import com.trhui.ebook.common.beanvalidator.DateFormatValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 日期格式校验
 * @Author xiaogc
 * @Date 2020/9/]]></description><category></category></item><item><title><![CDATA[页面日期查询问题处理]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/103372741</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/103372741</guid><author>xiaogc_a</author><pubDate>Tue, 03 Dec 2019 17:41:05 +0800</pubDate><description><![CDATA[页面传递过来的是标准时间(yyyy-MM-dd’T’HH:mm:ss.SSSXXX)，换成北京时间需要加上8个小时
例子：
后端DTO对象：
public void setEndTime(String endTime) {
        this.endTime=endTime;
        if(StringUtils.isBlank(endTime)) {
            thi...]]></description><category></category></item><item><title><![CDATA[Spring循环引用踩坑记]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/103278059</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/103278059</guid><author>xiaogc_a</author><pubDate>Wed, 27 Nov 2019 16:24:36 +0800</pubDate><description><![CDATA[项目启动的时候报了如下的错误：
Error creating bean with name 'boingpayCallbackController': Unsatisfied dependency expressed through field 'transitToCashService'; nested exception is org.springframework.beans.factory...]]></description><category></category></item><item><title><![CDATA[分库分表]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/102829444</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/102829444</guid><author>xiaogc_a</author><pubDate>Wed, 30 Oct 2019 23:43:01 +0800</pubDate><description><![CDATA[为什么要分库分表？

单表并发高，数据量大，无法承载
分库：将一个库的数据拆分到多个相同的库中，访问的时候访问一个库
分表：把一个表的数据放到多个表中，操作对应的某个表就行

如何对数据库进行垂直拆分和水平拆分

垂直拆分

把一个有很多字段的表拆分成多个表，或者是多个库上去。每个库表的结构不一样，每个库表包含部分字段。一般来说，将较少的访问频率很高的字段放到一个表中，然后较多访问频率低的字段放到...]]></description><category></category></item><item><title><![CDATA[接口自动化测试框架TestNg]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/101675337</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/101675337</guid><author>xiaogc_a</author><pubDate>Sun, 29 Sep 2019 10:32:07 +0800</pubDate><description><![CDATA[什么是TestNG
TestNG，即Testing Next Generation，它派生自JUnit和NUnit，除了继承了两者的优势之外，又额外的发展出了一些新的功能，在参数化测试，依赖测试和套件测试(分组概念)方面更加突出。 TestNG用于高级测试和复杂集成测试。
为什么用TestNG
TestNG有以下优点：


生成美观易读的测试报告


注解  使测试变得更加方便


可以更轻松地对...]]></description><category></category></item><item><title><![CDATA[单机事务中死锁产生的原因及解决办法]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/101487710</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/101487710</guid><author>xiaogc_a</author><pubDate>Fri, 27 Sep 2019 00:48:48 +0800</pubDate><description><![CDATA[产生原因：

两个线程
不同方向
相同资源

只要上面3个碰在一起一定会出现死锁问题！

举个例子：转账

两个事务单元


事务单元一
第一步操作：Lock Bob
第二部操作：Lock Simth


事务单元二
第一步操作：Lock Simth
第二部操作：Lock Bob


他们俩都持有一把锁；
事务单元2想要Lock Bob的时候，他是进不到Bob那个锁上面的，于是事务单元2就等待了；...]]></description><category></category></item><item><title><![CDATA[Spring  IoC 容器的理解]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/100128805</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/100128805</guid><author>xiaogc_a</author><pubDate>Wed, 28 Aug 2019 23:51:52 +0800</pubDate><description><![CDATA[Spring  IoC 容器
IoC是什么

IoC （全名Inversion of Control，即控制反转）是指在程序开发中，实例的创建不再由调用者管理，而是由 Spring 容器创建。
Spring 容器会负责控制程序之间的关系，而不是由程序代码直接控制，因此，控制权由程序代码转移到了 Spring 容器中，控制权发生了反转，这就是 Spring 的 IoC 思想。
Spring 提供了两...]]></description><category></category></item><item><title><![CDATA[SpringCloud之Feign踩坑]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/98849019</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/98849019</guid><author>xiaogc_a</author><pubDate>Thu, 08 Aug 2019 10:30:02 +0800</pubDate><description><![CDATA[Hystrix超时和Ribbon客户
当使用包含Ribbon客户端的Hystrix命令时，您需要确保您的Hystrix超时配置为长于配置的Ribbon超时，包括任何可能的重试。例如，如果您的Ribbon连接超时为一秒钟，并且Ribbon客户端可能会重试该请求三次，那么您的Hystrix超时时间应该略超过三秒钟。如果 Hystrix 的超时时间小于 Ribbon 超时时间，则不会重试，直接被断路器组...]]></description><category></category></item><item><title><![CDATA[zookeeper在windows下的伪集群模式中因斜杠问题启动闪退]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/98048402</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/98048402</guid><author>xiaogc_a</author><pubDate>Thu, 01 Aug 2019 12:47:33 +0800</pubDate><description><![CDATA[Invalid config, exiting abnormally
检查了zoo.cfg的配置，没有发现有多余都空格；
最终检查之后将错误定位到dataDir所配置都路径上面
原配置是这样：
dataDir=E:\soft\zookeeper\server2\zookeeper-3.4.10\data

一直闪退
然后就将单斜杠“\”改为双斜杠“\\”就启动成功
dataDir=E:\\sof...]]></description><category></category></item><item><title><![CDATA[Centos7下安装maven]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/96377331</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/96377331</guid><author>xiaogc_a</author><pubDate>Wed, 17 Jul 2019 22:42:55 +0800</pubDate><description><![CDATA[maven压缩包看文末,有提供网盘地址,或自行官网下载
maven依赖JDK,JDK安装参考上一篇
通过Xftp将压缩包上传到服务器,解压到指定的目录
[root@localhost package]# tar zxvf apache-maven-3.6.0-bin.tar.gz -C /usr/local/java
ps:Xftp上一篇也有提供网盘地址
配置环境变量
[root@localhos...]]></description><category></category></item><item><title><![CDATA[Centos7下安装JDK1.8]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/96219029</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/96219029</guid><author>xiaogc_a</author><pubDate>Wed, 17 Jul 2019 01:37:33 +0800</pubDate><description><![CDATA[Centos7下安装JDK1.8
查看是否安装了Java
[xiaogc@localhost ~]$ java -version
-bash: java: 未找到命令
查看内置JDK
[xiaogc@localhost ~]$ rpm -qa | grep jdk
[xiaogc@localhost ~]$
之后发现未安装

准备工作：
下载jdk压缩包；安装Xshell、Xftp，建议官网下载社...]]></description><category></category></item><item><title><![CDATA[线程池的实现原理]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/94415927</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/94415927</guid><author>xiaogc_a</author><pubDate>Tue, 02 Jul 2019 00:37:21 +0800</pubDate><description><![CDATA[Java中的线程池是运用场景最多的并发框架，几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中，合理地使用线程池能够带来3个好处 。


第一：降低资源消耗。避免重复创建和销毁造成的消耗。


第二：提高响应速度。当任务到达时，不需要再次创建线程就能立即执行。


第三：提高线程的可管理性。可以进行统一分配、调优和监控。


线程池的主要处理流程

从图中可以看出，当提交一个新任务...]]></description><category></category></item><item><title><![CDATA[关于ThreadPoolExecutor参数详解]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/93734264</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/93734264</guid><author>xiaogc_a</author><pubDate>Wed, 26 Jun 2019 13:50:08 +0800</pubDate><description><![CDATA[例子：
ThreadPoolExecutor executorPool = new ThreadPoolExecutor(3, 5, 60, TimeUnit.SECONDS, new LinkedBlockingQueue&lt;Runnable&gt;(50));

3是corePoolSize - 意味着Jvm将为前3个任务的新任务创建新线程。并且其他任务将被添加到队列中，直到队列变满（50...]]></description><category></category></item><item><title><![CDATA[vue文件下载，java读取SFTP文件通过流的方式输出到前端]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/93639307</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/93639307</guid><author>xiaogc_a</author><pubDate>Tue, 25 Jun 2019 18:15:04 +0800</pubDate><description><![CDATA[vue文件下载，java读取SFTP文件通过流的方式输出到前端

java后台Controller层代码
 @RequestMapping("downloadFile")
    public void downLoadFile(HttpServletRequest req, HttpServletResponse response) {
        String fileName = req...]]></description><category></category></item><item><title><![CDATA[线程安全的懒汉式单例]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/90476255</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/90476255</guid><author>xiaogc_a</author><pubDate>Thu, 23 May 2019 10:51:19 +0800</pubDate><description><![CDATA[线程安全的懒汉式单例

懒汉式单例在多线程下是不安全的
public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }
    public static Singleton getInstance() {
        if (instance == null) {...]]></description><category></category></item><item><title><![CDATA[RSA后台加密，前端解密]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/89674756</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/89674756</guid><author>xiaogc_a</author><pubDate>Mon, 29 Apr 2019 14:51:55 +0800</pubDate><description><![CDATA[项目中有个地方需要从后台重定向到前端的登录页面，参数是直接拼接到URL后面的，考虑到安全性，所以采用将URL后面的参数进行RSA加密，前端再解密
java后台代码：
​	``
//生成秘钥对
public static KeyPair getKeyPair() throws Exception {
    KeyPairGenerator keyPairGenerator = KeyPairGen...]]></description><category></category></item><item><title><![CDATA[参数名按升序排列 +key+MD5+转大写签名]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/88862678</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/88862678</guid><author>xiaogc_a</author><pubDate>Thu, 28 Mar 2019 10:00:23 +0800</pubDate><description><![CDATA[/**
* sign 签名 （参数名按ASCII码从小到大排序（字典序）+key+MD5+转大写签名）
*
* @return
*/
public static String createSign(Map params, String key) {
    StringBuffer sbkey = new StringBuffer();
    // entrySet 所有参与传参的参数按照acc...]]></description><category></category></item><item><title><![CDATA[form表单往后台传日期]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/88576402</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/88576402</guid><author>xiaogc_a</author><pubDate>Fri, 15 Mar 2019 15:51:08 +0800</pubDate><description><![CDATA[前端HTML，后台springboot，form表单往后台传日期时候遇到的一些问题记录
页面：type=“time”
&amp;amp;amp;lt;input type=&amp;amp;quot;time&amp;amp;quot; min=&amp;amp;quot;00:00&amp;amp;quot; max=&amp;amp;quot;23:59&amp;amp;quot; class=&amp;amp;quot;form-control&amp;amp;quot; name=&amp;amp;]]></description><category></category></item><item><title><![CDATA[Java封装接口返回统一格式]]></title><link>https://blog.youkuaiyun.com/xiaogc_a/article/details/88550797</link><guid>https://blog.youkuaiyun.com/xiaogc_a/article/details/88550797</guid><author>xiaogc_a</author><pubDate>Thu, 14 Mar 2019 12:53:27 +0800</pubDate><description><![CDATA[Java封装接口返回统一格式
public class Result implements Serializable {

    private static final long serialVersionUID = -3948389268046368059L;

    private String code;

    private String msg;

    private Ob...]]></description><category></category></item></channel></rss>