<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Aubergines的专栏]]></title><description><![CDATA[工作生活点滴记载]]></description><link>https://blog.youkuaiyun.com/Pa_Java</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Pa_Java]]></copyright><item><title><![CDATA[使用PDFBOX提取PDF中的文字]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/125388776</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/125388776</guid><author>Pa_Java</author><pubDate>Tue, 21 Jun 2022 12:32:16 +0800</pubDate><description><![CDATA[使用PDFBOX提取PDF中的文字]]></description><category></category></item><item><title><![CDATA[线上OOM问题排查]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/119428810</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/119428810</guid><author>Pa_Java</author><pubDate>Thu, 05 Aug 2021 22:25:13 +0800</pubDate><description><![CDATA[今天上线了一个优化，上完线后测试验证没有问题，本来以为这个事情就告一段落，没有想到四五个小时以后运维就@我说服务的CPU占用过高，不一会就OOM了，赶紧让运维把堆栈dump文件给我，我用的是JProfiler来分析dump文件。

比较幸运的是我很容易就找到了自己熟悉的一个类



点击最后的show more，可以看到对应的方法堆栈，就可以知道是那块方法的问题

或者从Biggest Objects入手也可以


...]]></description><category></category></item><item><title><![CDATA[GIT遇到REMOTE HOST IDENTIFICATION HAS CHANGED怎么办]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/119356340</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/119356340</guid><author>Pa_Java</author><pubDate>Tue, 03 Aug 2021 18:20:27 +0800</pubDate><description><![CDATA[今日遇到如下问题：

警告的大概意思就是，主机密钥发生变更，并提示安全风险（可能存在中间人攻击）
但是事实是，这是因为我重装系统之后遇到的问题。重装系统后，指纹当然会发生变化了。。。在Xshell实验中，密钥发生变化，会进行交互式提示保存，但是linux里默认是没有这个配置的。思路明白了，我们的目的就是要更新并保存密钥。还好，linux的ssh也提供了对应的指令。

使用ssh-keygen -R [your server’s IP] 这条指令，然后回车，提示known_hosts已经更新，即可。

更新完]]></description><category></category></item><item><title><![CDATA[微信授权回调区分环境]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/119181498</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/119181498</guid><author>Pa_Java</author><pubDate>Wed, 28 Jul 2021 15:30:18 +0800</pubDate><description><![CDATA[目前公司有四套环境DEV、TEST、PRE、ONLINE，所以我们的代码能让用户使用了，就和升级打怪一样要经过这四关。这两天又处理了个微信授权回调需要到不同环境的问题，记录下给大家提供一个思路。我们都知道微信公众号或者微信开放平台的网站应用的回调域名只能配置一个，下面是微信开放平台的网站应用的回调域名配置

但是我们有多套环境，需要在同步的时候方便的切换到不同的环境
方式一：所有的回调授权都在线上处理
这种方式是回调都在线上的服务里，在回调的路径上加上环境参数，通过业务逻辑调用对应环境的接口处理对应的逻辑
]]></description><category></category></item><item><title><![CDATA[Feign.builder执行GET方法]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/119180381</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/119180381</guid><author>Pa_Java</author><pubDate>Wed, 28 Jul 2021 14:58:57 +0800</pubDate><description><![CDATA[我的服务是一部分业务场景的统一的出口，为了方便，我定义了我调用业务方的入参和出参，于是写了一个通用的Feign的方法:
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @RequestLine("GET /")
    Response&lt;PromptResult&gt; getPromatData(@Param("cid") Long cid);

针对不同的业务场景，我定义了个枚举
@G]]></description><category></category></item><item><title><![CDATA[Maven打包-上传源码包]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/116461446</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/116461446</guid><author>Pa_Java</author><pubDate>Thu, 06 May 2021 19:50:23 +0800</pubDate><description><![CDATA[公司内部业务之间的相互调用是用Feign，由业务方提供的Feign Client包，虽然有接口wiki，但是有的时候真不如直接看代码上的注释来的方便快捷.
&lt;plugin&gt;
	&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
	&lt;artifactId&gt;maven-source-plugin&lt;/artifactId&gt;
	&lt;version&gt;3.0.0&lt;/version&gt;
	&lt;execu]]></description><category></category></item><item><title><![CDATA[SpringBoot打包排除指定的包]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109904754</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109904754</guid><author>Pa_Java</author><pubDate>Sat, 21 Nov 2020 18:43:53 +0800</pubDate><description><![CDATA[使用spring-boot-maven-plugin排除指定的包
&lt;plugin&gt;
	&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
	&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
	&lt;configuration&gt;
		&lt;jvmArguments&gt;-Dfile.encoding=UTF-8&lt;/jvmArguments&gt;
]]></description><category></category></item><item><title><![CDATA[@JsonInclude之NON_NULL不生效问题]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109550287</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109550287</guid><author>Pa_Java</author><pubDate>Sat, 07 Nov 2020 18:07:23 +0800</pubDate><description><![CDATA[今天在使用JsonInclude的NON_NULL定义对象属性返回的情况时，开始出现的结果不是自己预期的，查询原因发现和继承有关
定义父级对象：
@Data
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 搜索值
     */
    private String searchValue;

    /**
     ]]></description><category></category></item><item><title><![CDATA[Jackson - @JsonInclude之USE_DEFAULTS]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109482434</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109482434</guid><author>Pa_Java</author><pubDate>Wed, 04 Nov 2020 00:33:46 +0800</pubDate><description><![CDATA[指定了JsonInclude.Include＃value的USE_DEFAULTS，以便可以使用更高级别的默认值。如果在属性上使用此选项@JsonInclude，则将使用类的设置（如果存在），否则将使用全局序列化包含规则（通过设置ObjectMapper）。
例子
Java对象
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Employee {
  private String name;
  private String dept;
  ]]></description><category></category></item><item><title><![CDATA[Jackson - @JsonInclude之NON_DEFAULT]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109482380</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109482380</guid><author>Pa_Java</author><pubDate>Wed, 04 Nov 2020 00:25:12 +0800</pubDate><description><![CDATA[@JsonInclude（JsonInclude.Include.NON_DEFAULT）可用于排除具有POJO默认值的属性。这有不同的用法，如下所示：

如果在类级别使用@JsonInclude（JsonInclude.Include.NON_DEFAULT），则将排除字段的默认值。这是通过使用零参数构造函数创建POJO实例并比较属性值（不包括默认值，例如，默认int值为0，默认String值为null等）来完成的。
如果在属性级别使用@JsonInclude（JsonInclude.Include.NO]]></description><category></category></item><item><title><![CDATA[Jackson - @JsonInclude之NON_EMPTY]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109482293</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109482293</guid><author>Pa_Java</author><pubDate>Wed, 04 Nov 2020 00:12:20 +0800</pubDate><description><![CDATA[@JsonInclude(NON_EMPTY)可用于排除空值。以下值被认为是空的：

JsonInclude.Include NON_NULL。
由JsonInclude定义的’Absent’值.Include NON_ABSENT（教程）。
对于Collections和Maps，如果methodisEmpty()返回true。
对于Java数组，如果length = 0。
对于String，如果Strings.length()返回0。

例子
Java对象
@JsonInclude(JsonInclude]]></description><category></category></item><item><title><![CDATA[Jackson - @JsonInclude之NON_ABSENT]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109482223</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109482223</guid><author>Pa_Java</author><pubDate>Wed, 04 Nov 2020 00:02:59 +0800</pubDate><description><![CDATA[@JsonInclude(NON_ABSENT)可用于排除空值和“不存在”的值。此处的不存在值表示引用空值的非空引用类型值（例如java.utl.concurrent.atomic.AtomicReference）。
例子
对象
@JsonInclude(JsonInclude.Include.NON_ABSENT)
public class Employee {
 	private String name;
 	private String dept;
 	private AtomicReference&]]></description><category></category></item><item><title><![CDATA[Jackson - 浅析@JsonInclude]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109482129</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109482129</guid><author>Pa_Java</author><pubDate>Tue, 03 Nov 2020 23:52:29 +0800</pubDate><description><![CDATA[@JsonInclude注解可用于指示何时可以对添加注解的属性进行序列化。通常会包含属性值，但是通过使用这个注解，我们可以基于属性值指定简单的排除规则。
这个注解可用于字段，方法或构造函数参数。它也可以在类上使用，这样对应的规则将应用于类的所有属性。
以下是@JsonInclude定义代码段：
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD,
    ElementType.TYPE, ElementTy]]></description><category></category></item><item><title><![CDATA[Jackson - @JsonInclude之NON_NULL]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109481827</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109481827</guid><author>Pa_Java</author><pubDate>Tue, 03 Nov 2020 23:27:00 +0800</pubDate><description><![CDATA[对于属性值为NULL要不返回对应的属性，在Model添加@JsonInclude(JsonInclude.Include.NON_NULL)如果有为NULL的属性，则不会返回

使用前效果：

使用后的效果：


]]></description><category></category></item><item><title><![CDATA[Feign 路径问题]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109460586</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109460586</guid><author>Pa_Java</author><pubDate>Tue, 03 Nov 2020 00:20:25 +0800</pubDate><description><![CDATA[引入三方包后项目启动报java.lang.IllegalStateException: template has not been resolved,发现是Feign包中RequestTemplate中类报出来的，但是自己还没有执行调用的逻辑，启动阶段只算是初始化,怀疑是Feign Client 包有问题，最终通过仔细观察发现是接口中方法上的方法路径RequestMapping的value缺少/导致的。

...]]></description><category></category></item><item><title><![CDATA[Hystrix原理与实战]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/109210639</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/109210639</guid><author>Pa_Java</author><pubDate>Wed, 21 Oct 2020 21:53:20 +0800</pubDate><description><![CDATA[背景
分布式系统环境下，服务间类似依赖非常常见，一个业务调用通常依赖多个基础服务。如下图，对于同步调用，当库存服务不可用时，商品服务请求线程被阻塞，当有大批量请求调用库存服务时，最终可能导致整个商品服务资源耗尽，无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递，这种现象被称为雪崩效应。

雪崩效应常见场景

硬件故障：如服务器宕机，机房断电，光纤被挖断等。
流量激增：如异常流量，重试加大流量等。
缓存穿透：一般发生在应用重启，所有缓存失效时，以及短时间内大量缓存失效时。大量的缓存不命中，使请求直]]></description><category></category></item><item><title><![CDATA[Java好用的合成图片工具]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/108892038</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/108892038</guid><author>Pa_Java</author><pubDate>Thu, 01 Oct 2020 00:35:14 +0800</pubDate><description><![CDATA[前言：互联网本质还是流量的生意，谁收割的流量最多，谁便是下一个赢家。“自古流量出社交”也就可以解释为什么每个APP都有一个社交梦，每个PM都有一颗想做社交的心。无论是B端产品还是C端产品，能够讲好一个“社交故事”，就很有可能给资本市场带来无穷的想象空间。公司一直有分享合成图片的场景，之前自己写起来比较费劲，最近找了一个比较好用的工具分享给大家码云地址，感谢opensourcechen的分享。
话不多说，直接上例子看效果

public void testCombineTopicImage() throws ]]></description><category></category></item><item><title><![CDATA[记一次压测问题排查过程]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/108806594</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/108806594</guid><author>Pa_Java</author><pubDate>Sat, 26 Sep 2020 00:22:10 +0800</pubDate><description><![CDATA[今天进行服务压测的时候，A服务的接口会根据传参调用下游的B服务或C服务，压测发现调用B服务的时候吞吐量在4K TPS，但是调用C服务的时候TPS却只有几十。
1、排查业务代码调用C服务的逻辑发现并不复杂
2、排查C服务的服务器的负载，数据库的负载发现都处于极低的水平，没有慢SQL
3、排查打印C服务的堆栈，发现大量的线程处于TIMED_WAITING的状态，怀疑线程池的配置问题

4、排查数据库线程池的配置，发现没有问题。打开Druid的监控，发现池中连接数、池中连接数峰值	、活跃连接数峰值正常，与预期一致]]></description><category></category></item><item><title><![CDATA[一步一步Spring Cloud Config配置中心]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/98801820</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/98801820</guid><author>Pa_Java</author><pubDate>Thu, 08 Aug 2019 00:14:58 +0800</pubDate><description><![CDATA[pom文件

	&lt;parent&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
		&lt;version&gt;1.5.4.RELEASE&lt;/version&gt;
		&lt...]]></description><category></category></item><item><title><![CDATA[给图片添加满屏的图文水印]]></title><link>https://blog.youkuaiyun.com/Pa_Java/article/details/97943823</link><guid>https://blog.youkuaiyun.com/Pa_Java/article/details/97943823</guid><author>Pa_Java</author><pubDate>Wed, 31 Jul 2019 18:19:46 +0800</pubDate><description><![CDATA[####### 前言：为了防止网站的图片资源被盗用，需要给图片打上图文的水印，之前做了一版只是在图片的右下角打上图文水印，这次升级了，要求在整个屏幕上都打上水印。话不多说，直接上代码。
	/**
	 * 水印图片的大小
	 */
	public static final double BASE_SIZE = 200d;
	/**
	 * 图片的宽高倍数
	 */
	public static fi...]]></description><category></category></item></channel></rss>