<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[当冬夜渐暖的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/luxing205</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; luxing205]]></copyright><item><title><![CDATA[idea常用快捷键]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/126307783</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/126307783</guid><author>luxing205</author><pubDate>Fri, 12 Aug 2022 17:17:43 +0800</pubDate><description><![CDATA[idea默认常用快捷键]]></description><category></category></item><item><title><![CDATA[记一次feign调用序列化的问题]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/121168574</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/121168574</guid><author>luxing205</author><pubDate>Fri, 05 Nov 2021 18:45:01 +0800</pubDate><description><![CDATA[测试环境出现页面报错，经调试和查看日志发现是A服务调用B服务之间出了问题。
报错如下：
feign.codec.EncodeException: Error converting request body
        at org.springframework.cloud.openfeign.support.SpringEncoder.encode(SpringEncoder.java:112)
        at feign.form.FormEncoder.encode(FormEncoder.]]></description><category></category></item><item><title><![CDATA[springboot 之 @ConfigurationProperties注解的使用]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/120786177</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/120786177</guid><author>luxing205</author><pubDate>Fri, 15 Oct 2021 16:47:40 +0800</pubDate><description><![CDATA[前言
最近在思考使用java config的方式进行配置，java config是指基于java配置的spring。传统的Spring一般都是基本xml配置的，后来spring3.0新增了许多java config的注解，特别是spring boot，基本都是清一色的java config。
Spring配置方式
第一阶段：xml配置
    在spring 1.x时代，使用spring开发满眼都是xml配置的bean，随着项目的扩大，
我们需要把xml配置文件分放到不同的配置文件中，那时候需要频繁地在开发]]></description><category></category></item><item><title><![CDATA[springboot 之 自定义异常，实现业务逻辑错误提示]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/120670215</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/120670215</guid><author>luxing205</author><pubDate>Sat, 09 Oct 2021 14:36:15 +0800</pubDate><description><![CDATA[为了解决把系统里的业务提示与代码错误和系统错误提示区分开，需要有统一的异常提示机制，所以用自定义异常来解决此问题
一、首先定义异常类ServiceException，里面重载了三个构造方法，可以适用不同场景的异常提示问题
@Getter
public class ServiceException extends RuntimeException{
    private Integer code;

    /**
     * 使用已有的错误类型
     * @param type 枚举类中的错误类型
]]></description><category></category></item><item><title><![CDATA[springboot 之aop实现日志记录]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/120665609</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/120665609</guid><author>luxing205</author><pubDate>Sat, 09 Oct 2021 10:40:14 +0800</pubDate><description><![CDATA[一、首先自定义注解类SysLogAnnotation
/**
 * @date 2019/2/1 操作日志注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLogAnnotation {

	/**
	 * 描述
	 * @return {String}
	 */
	String value();
}

二、添加切面类SysLogAspect，实现同一]]></description><category></category></item><item><title><![CDATA[mybatis之generator代码自动生成]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/120548931</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/120548931</guid><author>luxing205</author><pubDate>Wed, 29 Sep 2021 15:12:33 +0800</pubDate><description><![CDATA[使用generator自动生成mapper，entity，xml文件减少手动编写工作，并且生成的实体自动添加中文注释
1、引入maven jar包
 &lt;!--mysql连接和generator相关包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt;
            &lt;artifactId&gt;mybatis-generator-core&lt]]></description><category></category></item><item><title><![CDATA[springboot之整合slf4j]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/120548165</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/120548165</guid><author>luxing205</author><pubDate>Wed, 29 Sep 2021 14:39:35 +0800</pubDate><description><![CDATA[1 引入依赖
 &lt;!-- 日志 --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;ch.qos.logback&lt;/groupId&gt;
            &lt;artifactId&gt;logback-classic&lt;/artifactId&gt;
            &lt;version&gt;1.2.5&lt;/version&gt;
            &lt;scope&gt;compil]]></description><category></category></item><item><title><![CDATA[idea好用的插件]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/117561567</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/117561567</guid><author>luxing205</author><pubDate>Fri, 04 Jun 2021 14:55:41 +0800</pubDate><description><![CDATA[添加插件路径：settings===&gt;plugins
搜索插件名称，然后点击install，重启idea后生效

1、Free Mybatis plugin
mapper文件跳转到sql的插件
2、maven Helper
maven查看jar包冲突插件
3、SonarLint
代码格式，魔法值等检测

...]]></description><category></category></item><item><title><![CDATA[springcloud动态配置不同环境logback日志 配置]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/117128441</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/117128441</guid><author>luxing205</author><pubDate>Fri, 21 May 2021 17:12:15 +0800</pubDate><description><![CDATA[1、首先在bootstrap.yml文件添加如下配置：

logging.config: classpath:logback-spring.xml   //配置各个环境使用的log配置文件
logback.path: /home/work/logs        //配置相应的环境log打印路径

2、不同环境动态配置日志路径和级别
动态配置日志打印路径：使用springProperty属性，source配置对应的yml文件的配置

&lt;springProperty scope="context" na]]></description><category></category></item><item><title><![CDATA[springcloud接入knife4j在线api文档]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/117128243</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/117128243</guid><author>luxing205</author><pubDate>Fri, 21 May 2021 17:06:24 +0800</pubDate><description><![CDATA[1、引入Maven依赖jar包
&lt;!--knife4j-micro-包含swagger2依赖--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.github.xiaoymin&lt;/groupId&gt;
            &lt;artifactId&gt;knife4j-micro-spring-boot-starter&lt;/artifactId&gt;
            &lt;version&gt;]]></description><category></category></item><item><title><![CDATA[Springboot 整合Retry 实现重试机制]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/116528441</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/116528441</guid><author>luxing205</author><pubDate>Sat, 08 May 2021 15:30:18 +0800</pubDate><description><![CDATA[重试，在项目需求中是非常常见的，例如遇到网络波动等，要求某个接口或者是方法可以最多/最少调用几次；
实现重试机制，非得用Retry这个重试框架吗？那肯定不是，相信很多伙伴手写一下控制流程的逻辑也可以达到重试的目的。
那么用Retry的好处是什么？ 简单来说，就是优雅。
Retry重试框架，支持AOP切入的方式使用，而且能使用注解；想想，重试次数、重试延迟、重试触发条件、重试的回调方法等等我们都能很轻松结合注解以一种类似配置参数的方式去实现，优雅无疑。
那么，我们接下来就来一起使用Springboot整合这个]]></description><category></category></item><item><title><![CDATA[zookeeper实现服务注册的原理]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/115307446</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/115307446</guid><author>luxing205</author><pubDate>Mon, 29 Mar 2021 18:02:24 +0800</pubDate><description><![CDATA[本文介绍基于ZooKeeper的Dubbo服务注册中心的原理。
1.ZooKeeper中的节点
ZooKeeper是一个树形结构的目录服务，支持变更推送，因此非常适合作为Dubbo服务的注册中心。
注：在ZooKeeper中，节点分为两类，第一类是指构成集群的机器，我们称之为机器节点；第二类是指数据模型中的数据单元，称之为数据节点ZNode。ZooKeeper将所有数据存储在内存中，数据模型是一棵树(ZNode Tree)，由斜杠（/）进行分割的路径，就是一个ZNode，例如/foo/path1。每个ZNo]]></description><category></category></item><item><title><![CDATA[记一次maven jar包引入问题]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114969423</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114969423</guid><author>luxing205</author><pubDate>Thu, 18 Mar 2021 11:17:07 +0800</pubDate><description><![CDATA[项目场景：

SpringBoot集成EasyExcel，在导入Excel进行解析处理时，执行到doReadSync()时报错，提示java.lang.IncompatibleClassChangeError或者net.sf.cglib.beans.beanMap
not found。本地却没有问题

问题描述：
报错日志
com.alibaba.excel.exception.ExcelAnalysisException: java.lang.IncompatibleClassChangeError: c]]></description><category></category></item><item><title><![CDATA[30道Redis面试题]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114936849</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114936849</guid><author>luxing205</author><pubDate>Wed, 17 Mar 2021 16:38:53 +0800</pubDate><description><![CDATA[1、什么是Redis？简述它的优缺点？
Redis本质上是一个Key-Value类型的内存数据库，很像memcached，整个数据库统统加载在内存当中进行操作，定期通过异步操作把数据库数据flush到硬盘上进行保存。
因为是纯内存操作，Redis的性能非常出色，每秒可以处理超过 10万次读写操作，是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能，Redis最大的魅力是支持保存多种数据结构，此外单个value的最大限制是1GB，不像 memcached只能保存1MB的数据，因此Re]]></description><category></category></item><item><title><![CDATA[springboot 之 项目启动后执行某方法]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114665945</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114665945</guid><author>luxing205</author><pubDate>Thu, 11 Mar 2021 15:04:33 +0800</pubDate><description><![CDATA[由于在工作中需要缓存省市区信息，并且还要定时的去更新，所以写了个定时任务去定时更新缓存的省市区信息，但是当服务器重启后缓存是为空的，这时使用会有问题，所以想到在项目启动是去初始化缓存信息，下面讲到的方法就是基于此而来。

第一个想到的是使用ApplicationRunner和CommandLineRunner，下面讲讲这两个实现方式
1、实现ApplicationRunner接口
ApplicationRunner　源码如下　：
public interface ApplicationRunner {

.]]></description><category></category></item><item><title><![CDATA[请使用线程池创建线程，而勿手动创建线程]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114639313</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114639313</guid><author>luxing205</author><pubDate>Wed, 10 Mar 2021 16:56:28 +0800</pubDate><description><![CDATA[在中大型项目中，不可避免地需要执行异步任务，而异步任务的执行则是通过线程而执行的，因此掌握线程是如何创建的则是执行异步任务的第一步。
我们知道，常见的创建线程的方式有：

继承Thread类，重写run()方法
实现Runnable接口，重写run()方法
使用线程池创建线程

一、继承Thread类
public class ThreadOne extends Thread {

    @Override
    public void run() {
        System.out.printl]]></description><category></category></item><item><title><![CDATA[Redis 之 过期策略及内存淘汰机制]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114633494</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114633494</guid><author>luxing205</author><pubDate>Wed, 10 Mar 2021 13:56:35 +0800</pubDate><description><![CDATA[Redis的用途非常广泛。作为一个高性能的内存数据库，它经常被用于缓存的业务场景。
所谓缓存，即在第一次获取到数据的时候，把它暂存在内存中。这样下次需要这个数据的时候，就直接从内存中取，不用再去查询数据库或调用远程接口，这样可以极大地提高应用程序的性能。
如果缓存中的数据永久存在，那占用的内存就会变得越来越大。而内存是有限的，所以缓存系统需要在需要的时候删除一些不必要的缓存数据以节约内存空间。
Redis提供了两种机制配合来达到上述目的：过期策略和内存淘汰机制。
过期策略
使用过Redis的同学应该知道，我]]></description><category></category></item><item><title><![CDATA[SpringBoot 之 @Configuration注解]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114628408</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114628408</guid><author>luxing205</author><pubDate>Wed, 10 Mar 2021 10:28:39 +0800</pubDate><description><![CDATA[从Spring3.0，@Configuration用于定义配置类，可替换xml配置文件，被注解的类内部包含有一个或多个被@Bean注解的方法，这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描，并用于构建bean定义，初始化Spring容器。

@Configuration标注在类上，相当于把该类作为spring的xml配置文件中的，作用为：配置spring容器(应用上下文)
@Confi.]]></description><category></category></item><item><title><![CDATA[spring 之 @Import注解的三种使用方式]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114595222</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114595222</guid><author>luxing205</author><pubDate>Tue, 09 Mar 2021 19:09:41 +0800</pubDate><description><![CDATA[spring注解之@Import注解的三种使用方式
目录
1、@Import注解须知
2、@Import的三种用法
2.1、第一种用法：直接填class数组
2.2、第二种用法：ImportSelector方式【重点】
2.3、第三种用法：ImportBeanDefinitionRegistrar方式
3、@Import注解的三种使用方式总结
1、@Import注解须知

1、@Import只能用在类上 ，@Import通过快速导入的方式实现把实例加入spring的IOC容器中
2、加入IOC容器的方式有很]]></description><category></category></item><item><title><![CDATA[Spring 之 @bean注解]]></title><link>https://blog.youkuaiyun.com/luxing205/article/details/114594742</link><guid>https://blog.youkuaiyun.com/luxing205/article/details/114594742</guid><author>luxing205</author><pubDate>Tue, 09 Mar 2021 18:48:28 +0800</pubDate><description><![CDATA[1、Spring注解分类
从广义上Spring注解可以分为两类：
一类注解是用于注册Bean

假如IOC容器就是一间空屋子，首先这间空屋子啥都没有，我们要吃大餐，我们就要从外部搬运食材和餐具进来。这里把某一样食材或者某一样餐具搬进空屋子的操作就相当于每个注册Bean的注解作用类似。注册Bean的注解作用就是往IOC容器中放（注册）东西！
用于注册Bean的注解： 比如@Component , @Repository , @ Controller , @Service ,
@Configration这些注解]]></description><category></category></item></channel></rss>