<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaosong2001的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaosong2001</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaosong2001]]></copyright><item><title><![CDATA[Springboot实现Word、Excel、Pdf转图片]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/141184892</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/141184892</guid><author>xiaosong2001</author><pubDate>Wed, 14 Aug 2024 11:36:36 +0800</pubDate><description><![CDATA[以下是maven依赖。，以下是maven依赖。]]></description><category></category></item><item><title><![CDATA[Mybatis-Plus通过全局拦截实现查询SQL根据创建时间排序（create_time）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/132691540</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/132691540</guid><author>xiaosong2001</author><pubDate>Tue, 05 Sep 2023 14:40:44 +0800</pubDate><description><![CDATA[Mybatis-Plus通过全局拦截实现查询SQL根据创建时间排序（create_time）]]></description><category></category></item><item><title><![CDATA[Java导出根据模板PDF（Springboot+Adobe Acrobat）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/131049902</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/131049902</guid><author>xiaosong2001</author><pubDate>Mon, 05 Jun 2023 16:04:23 +0800</pubDate><description><![CDATA[1、使用Adobe Acrobat创建PDF模板（设置文本域），文本域命名对应Java实体类。4、导出效果（字体和换行可在Adobe Acrobat中设置）3、编写实现类和控制类。]]></description><category></category></item><item><title><![CDATA[Springboot集成可编排的组件式规则引擎LiteFlow]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/130865996</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/130865996</guid><author>xiaosong2001</author><pubDate>Thu, 25 May 2023 14:30:10 +0800</pubDate><description><![CDATA[Springboot集成可编排的组件式规则引擎LiteFlow]]></description><category></category></item><item><title><![CDATA[SpringBoot配置Elasticsearch以逗号分词查询（自定义逗号分词器）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/128514494</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/128514494</guid><author>xiaosong2001</author><pubDate>Sun, 01 Jan 2023 18:47:15 +0800</pubDate><description><![CDATA[SpringBoot配置Elasticsearch以逗号分词查询(自定义逗号分词器）]]></description><category></category></item><item><title><![CDATA[SpringBoot集成WebSocket实现单用户登录（强制下线）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/125344013</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/125344013</guid><author>xiaosong2001</author><pubDate>Sat, 18 Jun 2022 10:52:35 +0800</pubDate><description><![CDATA[SpringBoot集成WebSocket实现单用户登录（强制下线）]]></description><category></category></item><item><title><![CDATA[JUC学习记录]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/124349053</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/124349053</guid><author>xiaosong2001</author><pubDate>Fri, 22 Apr 2022 16:34:42 +0800</pubDate><description><![CDATA[1、虚假唤醒
多线程环境下，有多个线程执行了wait()方法，需要其他线程执行notify()或者notifyAll()方法去唤醒它们，假如多个线程都被唤醒了，但是只有其中一部分是有用的唤醒操作，其余的唤醒都是无用功；对于不应该被唤醒的线程而言，便是虚假唤醒。
package sync;
/**
当wait在if语句内时，因为进入前已经判断过条件，所以唤醒时（在哪睡，在哪醒）就不会再判断，继续执行下面语句，既发送虚假唤醒
 */
class Calculator {
    private int num ]]></description><category></category></item><item><title><![CDATA[Jenkins自动化部署SpringCloud+Vue+Nuxt]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/124076523</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/124076523</guid><author>xiaosong2001</author><pubDate>Sun, 10 Apr 2022 13:03:43 +0800</pubDate><description><![CDATA[linux安装java

vim etc/profile

export JAVA_HOME=/home/jdk/jdk1.8.0_321
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

source .]]></description><category></category></item><item><title><![CDATA[算法学习记录（leetcode）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/123839517</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/123839517</guid><author>xiaosong2001</author><pubDate>Wed, 30 Mar 2022 10:18:07 +0800</pubDate><description><![CDATA[算法学习记录

最大子数组和


给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。子数组 是数组中的一个连续部分。
示例 1：
输入：nums = [-2,1,-3,4,-1,2,1,-5,4] 输出：6 解释：连续子数组 [4,-1,2,1] 的和最大，为 6 。
示例 2：
输入：nums = [1] 输出：1
示例 3：
输入：nums = [5,4,-1,7,8] 输出：23

from typing import List
# dp[i]：]]></description><category></category></item><item><title><![CDATA[SpringCloud(Nacos)-整合docker+zookeeper+kafka+canal(单机)-宝塔linux]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/123663663</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/123663663</guid><author>xiaosong2001</author><pubDate>Tue, 22 Mar 2022 18:35:53 +0800</pubDate><description><![CDATA[SpringCloud(Nacos)-整合docker+zookeeper+kafka+canal(单机)-宝塔linux

①拉取镜像
docker pull canal/canal-server:v1.1.4
docker pull zookeeper
docker pull wurstmeister/kafka


一、zookeeper

①启动zookeeper（端口2181）
docker run -d --name zookeeper -p 2181:2181 --restart always]]></description><category></category></item><item><title><![CDATA[Docker 安装Canal]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/123326179</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/123326179</guid><author>xiaosong2001</author><pubDate>Mon, 07 Mar 2022 11:31:43 +0800</pubDate><description><![CDATA[Docker 安装Canal

mysql已开启binlog
①拉取canal镜像(版本：2019年发布的v1.1.4)

docker pull canal/canal-server:v1.1.4


②启动镜像

docker run --name canal -d canal/canal-server


③将容器内部配置文件拷贝到外部
docker cp [容器索引]:[内部路径] [外部路径]

docker cp canal:/home/admin/canal-server/conf/canal]]></description><category></category></item><item><title><![CDATA[Spring Security 初体验]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/122978204</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/122978204</guid><author>xiaosong2001</author><pubDate>Thu, 17 Feb 2022 11:09:46 +0800</pubDate><description><![CDATA[Spring Security 初体验

①认证过滤器（登录）
用于接收前端用户登录信息（username和password）与数据库用户信息（通过UserDetailsService查询）就行判断。
UserDetailsService：查询存在用户信息返回SecurityUser对象，否则抛出异常。
JWTPasswordHandler：判断密码是否正确。

/**
 * @author XS
 * @Version v1.0
 * @ClassName: 认证过滤器
 * @Description:
]]></description><category></category></item><item><title><![CDATA[Docker 安装Elasticsearch、Kibana、Logstash(宝塔linux)]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/122837411</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/122837411</guid><author>xiaosong2001</author><pubDate>Wed, 09 Feb 2022 11:09:29 +0800</pubDate><description><![CDATA[Docker 安装Elasticsearch和Kibana(宝塔linux)

①拉镜像
docker pull elasticsearch   最新版elasticsearch镜像
docker pull kibana 最新版kibana镜像


②查看镜像
docker images

镜像拉取成功


③创建桥接网络（docker network）
`docker network create elk_network


④启动Elasticsearch和Kibana镜像（注意选择创建的网络，因为ki]]></description><category></category></item><item><title><![CDATA[Spring Cloud（微服务）common模块]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/122783615</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/122783615</guid><author>xiaosong2001</author><pubDate>Fri, 04 Feb 2022 15:47:49 +0800</pubDate><description><![CDATA[①创建maven模块

②引入用到的依赖

③创建配置类（注意包路径）添加@Configuration 注解
④在其他模块引入common模块

⑤在启动类上添加@ComponentScan(basePackages = {"xs.zqy"}) 注解，路径为groupId




]]></description><category></category></item><item><title><![CDATA[Spring Cloud+Nacos 阿里云对象存储服务（OSS）使用]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/122695567</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/122695567</guid><author>xiaosong2001</author><pubDate>Wed, 26 Jan 2022 09:52:37 +0800</pubDate><description><![CDATA[Spring Cloud 阿里云对象存储服务（OSS）使用

①开通阿里云OSS服务，创建Bucket



②创建RAM子用户，记得保存下面的key（AccessKeySecret只在创建时显示），后面用nacos config动态配置

1、end_point
2、access_key_id
3、access_key_secret  （只在创建时显示）
4、bucket_name


③为RAM子用户添加OSS权限



④引入阿里云sdk（版本自行选择）

&lt;dependency&gt;
   ]]></description><category></category></item><item><title><![CDATA[Docker安装、启动、迁移]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/122308697</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/122308697</guid><author>xiaosong2001</author><pubDate>Tue, 04 Jan 2022 18:23:38 +0800</pubDate><description><![CDATA[设置docker镜像加速器-&gt;阿里云镜像加速器


①拉起应用镜像（mysql）


docker pull mysql（默认最新版本）
docker pull mysql:8.0.18 （指定版本）

docker pull mysql

docker pull mysql:8.0.18


②查看本地镜像

docker images


如下信息表示镜像拉取成功

③运行镜像

docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PA.]]></description><category></category></item><item><title><![CDATA[vue-admin-template后台权限生成菜单路由]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/121635653</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/121635653</guid><author>xiaosong2001</author><pubDate>Tue, 30 Nov 2021 17:05:57 +0800</pubDate><description><![CDATA[1、后端接口返回数据格式，前端主要用到了以下的属性



2、在src\store\modules下创建permission.js用于调用后端接口获取权限数据（第1步获取到的数据）

封装好的路由数据要跟src\router\index.js里面的格式一样。

src\store\modules\permission.js
import router, {
  constantRoutes
} from '@/router'
import {
  getPermission
} from '@/api/u.]]></description><category></category></item><item><title><![CDATA[vue+axios+nginx+springBoot 解决跨域（遇到的坑记录一下）]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/121415185</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/121415185</guid><author>xiaosong2001</author><pubDate>Fri, 19 Nov 2021 09:57:53 +0800</pubDate><description><![CDATA[vue使用axios发送请求跨域问题。
一、什么是CORS?
CORS(Corss-Orign Resource Sharing)是W3C工作草案，是一份浏览器技术的规范。定义了跨域资源访问时，浏览器和服务器之间如何通信，使用自定义的http头部允许浏览器和服务器相互了解对方，从而决定请求或响应成功与否。CORS在现代浏览器都支持，使用和普通的ajax没有任何区别，关键是只要服务器实现CORS接口。

当使用axios发送请求时，浏览器首先校验content-type是否为application/x-www]]></description><category></category></item><item><title><![CDATA[Nuxt.js使用VUE生命周期钩子函数重复调用接口问题(created()调用两次)]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/121173098</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/121173098</guid><author>xiaosong2001</author><pubDate>Sat, 06 Nov 2021 00:27:13 +0800</pubDate><description><![CDATA[Nuxt.js使用VUE生命周期钩子函数重复调用接口问题(created()调用两次)
解决问题前要先了解客户端渲染和服务端渲染的区别
1、客户端渲染
简单理解就是，在服务端放一个html 页面，客户端发起请求，服务端把页面发送过去。客户端从上到下依次解析，如果发现ajax请求就再发送新的请求，拿到ajax 响应结果以后渲染模板引擎。整个过程至少要发起两次请求。如图：

但是，这种渲染方式存在的弊端也是不容忽视的，比如请求量大时首屏渲染慢，不利于seo等问题。服务端渲染恰好弥补了这些不足。
2. 服务端渲染]]></description><category></category></item><item><title><![CDATA[@MapperScan扫描路径问题]]></title><link>https://blog.youkuaiyun.com/xiaosong2001/article/details/120918231</link><guid>https://blog.youkuaiyun.com/xiaosong2001/article/details/120918231</guid><author>xiaosong2001</author><pubDate>Sat, 23 Oct 2021 10:59:30 +0800</pubDate><description><![CDATA[问题：

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xs.zqy.test1.service.Account]]></description><category></category></item></channel></rss>