<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[A_droid的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/A_droid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; A_droid]]></copyright><item><title><![CDATA[关于spring加载（下载）xsd文件失败的问题。]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/116295774</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/116295774</guid><author>A_droid</author><pubDate>Fri, 30 Apr 2021 10:58:25 +0800</pubDate><description><![CDATA[一，前言

最近在开发的过程中，遇到了一个奇怪的问题，项目启启停停了几次之后，突然就跑不起来了。主要的报错信息如下：

1.Ignored XML validation warning

  schema_reference:无法读取文档 'xxx.xsd'

2.Server return HTTP response code :403 for URL : xxx.xsd

3.Context initialization fialed

大概就是这几个问题，可以看出来是xsd加载的问题，然后就开始了..]]></description><category></category></item><item><title><![CDATA[idea  打包项目]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/115654231</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/115654231</guid><author>A_droid</author><pubDate>Tue, 13 Apr 2021 09:32:26 +0800</pubDate><description><![CDATA[一，前言

最近在打包发布项目的时候，遇到了一个奇怪的问题：与项目有关的jar包，都已经在maven仓库了，但是每次打包项目的时候，都要去下载相关的jar包，导致打包项目的时候非常非常的长。



二，解决方法

把c盘那个路径下的maven设置文件，覆盖掉你maven安装路径下的设置文件就可以了。

按照网上的说法是，编译运行，idea用的是你maven设置的那个设置文件，但是打包的话，用的是另外一个设置文件，也就是你maven安装路径下的设置文件。
...]]></description><category></category></item><item><title><![CDATA[dependent on columns in GROUP BY clause； this is incompatible with sql_mode=only_full_group_by]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/112644873</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/112644873</guid><author>A_droid</author><pubDate>Thu, 14 Jan 2021 23:45:52 +0800</pubDate><description><![CDATA[一，前言

最近在使用mysql的分组grouo by的时候，出现了这个错误，我的记得我的写法之前是对的，查了一下资料才发现，原来是mysql版本的问题。



二，具体过程

编写sql的时候，查询了多个列，而分组的列只是其中的一个列。

我记得这个写法是没问题的，百度了之后才发现，原来5.6和5.7的sql_mode不一样了。

这前这个写法没问题，是因为mysql是5.6的，现在5.7之后就不可以了。

这个sql_mode，可以理解成是mysql对插入数据时候的一种校验，这里给出几种常见的：

O.]]></description><category></category></item><item><title><![CDATA[jvm笔记   （未完结）]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/112500767</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/112500767</guid><author>A_droid</author><pubDate>Mon, 11 Jan 2021 22:47:26 +0800</pubDate><description><![CDATA[一，PC寄存器
功能：主要负责记得当前线程的执行指令地址，每个 线程都会有各自的pc寄存器，因为在多线程坏境中，需要知道切换线程后，当前线程执行到哪个位置，当切换回来的时候，通过寻找到这个位置继续执行程序
既不会发生gc，也不会发生oom，是线程私有的


二，虚拟机栈
管理java程序运行，保存方法的局部变量（如果是引用类型则报存引用地址），部分结果，参与方法的调用和返回。内部保存的基本单位是栈帧，每个栈帧对应一个方法。
生命周期和线程一样，不会触发gc，是线程私有的
优点：栈是一种快速有效的分配存储结构]]></description><category></category></item><item><title><![CDATA[序列化]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/112209250</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/112209250</guid><author>A_droid</author><pubDate>Mon, 04 Jan 2021 23:29:26 +0800</pubDate><description><![CDATA[一，序列化id


/**
 * 单品表
 */
@Getter
@Setter
@ToString
public class Product extends BaseImgModel implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 单品id
     */
    @TableId(value = "product_id", type = IdType.AUTO)
 ]]></description><category></category></item><item><title><![CDATA[设计模式的七大原则]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/112000024</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/112000024</guid><author>A_droid</author><pubDate>Wed, 30 Dec 2020 23:49:39 +0800</pubDate><description><![CDATA[一，单一职责

职责越单一，被修改的原因就越少，模块的内聚性（Cohesion）就越高，被复用的可能性就越大，也更容易被理解。



二，开闭原则

实体应该对扩展开放，对修改关闭。在软件的生命周期内，更改是难免的，如果有一种方案既可以扩展软件功能，又可以不修改原代码，那是我们梦寐以求的。因为不修改就意味着不影响现有业务，新增的代码不会对既有业务产生影响，也就不会引发漏洞。我们通常通过继承和多态来实现OCP，即封装不变部分。对于需要变化的部分，通过接口继承实现的方式来实现“开放”。很多的设计模式都以达到O.]]></description><category></category></item><item><title><![CDATA[java  泛型边界  多继承的问题]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/111999236</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/111999236</guid><author>A_droid</author><pubDate>Wed, 30 Dec 2020 22:48:46 +0800</pubDate><description><![CDATA[一，前言

最近在做项目代码优化的时候，运用泛型来接受参数，从而让方法达到重用的效果。然后我想起之前看到过的一个面试问题：有没有使用过继承？java中有多继承吗？有用过extends多个对象吗？

在java里，类都是单继承的，接口可以多继承。对于extends多个对象，是在泛型里边有出现过，但是其实并不是真正的多继承。



二，具体代码分析



在使用泛型确定边界的时候，这个不就是多继承了吗？

其实并不是真正的多继承。BaseExcel是一个类，ProductService是一个接口，这种写法相当.]]></description><category></category></item><item><title><![CDATA[ThreadLocal]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/111500997</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/111500997</guid><author>A_droid</author><pubDate>Wed, 30 Dec 2020 21:57:29 +0800</pubDate><description><![CDATA[一，前言

ThreadLocal 用作保存每个线程独享的对象，为每个线程都创建一个副本，这样子就可以解决在并发情况下，因为多个线程访问共享变量而引发的并发问题。

也可以用作当前线程的全局变量，例如 ，通过过滤器来获取请求的用户信息，然后作为一个全局变量set到ThreadLocal里，在其他地方调用get方法来取出。



二，常用的方法分析



以上是ThreadLocal的类结构图，ThreadLocalMap是底层真正存储的对象，ThreadLocalMap由一个Entry类型的数组，Entr.]]></description><category></category></item><item><title><![CDATA[Text ‘2020-12-18‘ could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/111999042</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/111999042</guid><author>A_droid</author><pubDate>Wed, 30 Dec 2020 21:54:20 +0800</pubDate><description><![CDATA[错误信息提示很明显，yyyy-MM-dd格式的日期类型并不能转换成LocaldDateTime。

LocalDateTime必须是yyyy-MM-dd HH:mm:ss

解决方法：可以对字符串进行处理，补充缺少的部分
]]></description><category></category></item><item><title><![CDATA[Null return value from advice does not match primitive return type for]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/111998826</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/111998826</guid><author>A_droid</author><pubDate>Wed, 30 Dec 2020 21:47:30 +0800</pubDate><description><![CDATA[这个报错信息，大概说的是说，一个空的返回追不匹配。

跟踪 报错信息，它提示是一个service的save方法返回值不对。

具体代码：





可以看到，这个save方法返回值是一个基本数据类型，如果返回null则对应不上。



我百度了一下，其他小伙伴提供的这两种思路

1，直接修改方法的返回值

2，切面报错的问题



可以看到，切面返回的是一个object，如果是切面导致的异常，这个result就是一个空值，所以就会导致方法返回一个null。我们可以在这个方法里边try...catch一下看.]]></description><category></category></item><item><title><![CDATA[Springboot  初始化]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/111305017</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/111305017</guid><author>A_droid</author><pubDate>Wed, 16 Dec 2020 23:35:37 +0800</pubDate><description><![CDATA[一，前言

有时候，我们可能需要在使用一个service或者工具之前，做一些数据的初始化或者对象的初始化。这里介绍一下在开发中常用的三种做法



二，实战

2.1 使用 static 关键字

这个方法是比较普遍的实现方式之一，了解过类加载顺序的朋友都知道，静态属性和静态方法都比实例属性和实例方法先加载，这里就不多介绍了。



2.2 实现CommandLineRunner 接口

在springboot中，我们可以实现CommandLineRunner接口，重写run（）方法。

当spr...]]></description><category></category></item><item><title><![CDATA[SpringBoot  错误页面和异常处理]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110845976</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110845976</guid><author>A_droid</author><pubDate>Mon, 07 Dec 2020 23:03:06 +0800</pubDate><description><![CDATA[一，错误页面





如图所有，这两种错误提示在springboot开发的应有程序中都很常见，第一种是html请求，第二种是json格式的请求。

在SpringBoot中，默认错误请求控制器是BasicErrorController。



这里主要看我圈出来的这两个方法，第一个方法是处理html请求的错误，第二种是处理json格式请求的错误。

了解完基础知识之后，就可以开始准备我们专属的错误页面的。

从SpringBoot官方文档里边可以知道，默认的错误页面是在templates下的一个erroe]]></description><category></category></item><item><title><![CDATA[StringJoiner]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110837741</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110837741</guid><author>A_droid</author><pubDate>Mon, 07 Dec 2020 21:17:15 +0800</pubDate><description><![CDATA[一，前言

在项目里，经常会用到字符串拼接，例如，拼接多个水果名称，用竖线隔开： apple|orange|banana

注意，在最后是没有这个分隔符竖线的，这里我们可能 就需要用到逻辑操作去除最后的竖线。

但是，最近发现一个类可以完美完成以上功能。它就是StringJoiner。



二，StringJoiner



2.1构造函数StringJoiner


public StringJoiner(CharSequence delimiter) {
        this(delimite..]]></description><category></category></item><item><title><![CDATA[springboot  拦截器]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110410435</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110410435</guid><author>A_droid</author><pubDate>Mon, 30 Nov 2020 23:21:50 +0800</pubDate><description><![CDATA[一，基础知识

拦截器，它是基于AOP来实现的，它拦截的对象一般是方法。你可以使用拦截器来对某些方法执行某些任务，例如在Controller处理请求之前编写日志，添加或更新配置......





二，实战

配置类：


@Configuration
public class InterceptorConfig implements  WebMvcConfigurer {


    @Override
    public void addInterceptors(InterceptorRe...]]></description><category></category></item><item><title><![CDATA[springboot  过滤器Filter]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110410172</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110410172</guid><author>A_droid</author><pubDate>Mon, 30 Nov 2020 23:05:26 +0800</pubDate><description><![CDATA[一，基础知识

Filter 过滤器主要是用来过滤用户请求（也就是对请求路径过滤）的，它允许我们对用户请求进行前置处理和后置处理，比如实现 URL 级别的权限控制、过滤非法请求等等。而且，Filter是基于servlet的，也就是说它的生命周期和servlet一样。



二，实战

2.1 使用配置文件的方式来配置一个过滤器


@Component
public class MyFilter  implements Filter {
    

    @Override
    public vo..]]></description><category></category></item><item><title><![CDATA[SpringBoot2.x  时间日期类型的转换]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110133861</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110133861</guid><author>A_droid</author><pubDate>Wed, 25 Nov 2020 16:14:45 +0800</pubDate><description><![CDATA[一，前言

最近做项目遇到一个问题，就是controller层使用@RequestBody来接受一个对象，但是时间类型的属性需要自己手动去格式化。网上看了许多介绍的，使用@JsonFormat注解，使用@DateTimeFormat注解的，也都不行，最后找到了一个解决方法。





二，解决方法


import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationCon..]]></description><category></category></item><item><title><![CDATA[Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110088680</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110088680</guid><author>A_droid</author><pubDate>Tue, 24 Nov 2020 17:36:10 +0800</pubDate><description><![CDATA[一，前言

最近给项目加上了一个测试模块，但是在install的时候，出现了这个错误，一直编译不成功。通过百度搜查了很多文字，都是使用maven插件来跳过检测。我想是测试模块的问题，然后就到测试模块那边，注释掉了启动类上的测试注解，发现编译又成功了，但是还找不到原因，有大佬知道的请指教一下。



二，具体操作


...]]></description><category></category></item><item><title><![CDATA[SpringBoot2.X-启动项目的方式]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110085900</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110085900</guid><author>A_droid</author><pubDate>Tue, 24 Nov 2020 16:43:40 +0800</pubDate><description><![CDATA[一，通过idea直接启动





二，通过命令 mvn spring-boot:run 来运行

注意，需要进入到当前项目的目录后，再执行这个命令





可以看到，在执行这个命令之前，其实还进行了install操作，然后再启动项目。





三，打包，然后通过java -jar 运行

首先，先执行 mvn install 命令，编译项目，这个时候可以看到在target文件夹下打包生成项目的jar包



使用命令行进入到target目录，然后执行jar包



最后，成功运行



...]]></description><category></category></item><item><title><![CDATA[mysql limit的问题]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/103287102</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/103287102</guid><author>A_droid</author><pubDate>Tue, 24 Nov 2020 15:43:32 +0800</pubDate><description><![CDATA[一，问题的引出

   主要是limit a,b ，从a开始，返回后面的b条数据，会扫描a+b行。当a很大的时候就会影响查询速度。例如，limit10000,20的意思扫描满足条件的10020行，扔掉前面的10000行，返回最后的20行。



二，问题的解决方法
...]]></description><category></category></item><item><title><![CDATA[Springboot2.X —读取配置文件]]></title><link>https://blog.youkuaiyun.com/A_droid/article/details/110076369</link><guid>https://blog.youkuaiyun.com/A_droid/article/details/110076369</guid><author>A_droid</author><pubDate>Tue, 24 Nov 2020 14:46:31 +0800</pubDate><description><![CDATA[一，前言

最近在做项目的时候，用到了读取配置文件这个功能，发现网上的博客读取配置文件的方式有很多种，但是由于时间不一致，导致读取文件的方式也不同，这里列出我个人觉得比较好的方法来，就像跟使用常量一样，直接可以把配置文件的属性通过 点 来获取。



二，具体操作

第一步，先看配置文件


oyj:
  name: oujiji
  age: 18

我这个是yml的配置文件，通过一种key-value的形式来配置，而且在结构上更加有层次感。我们的目标就要是读取name和age这两个值



第二步...]]></description><category></category></item></channel></rss>