<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lihaooye的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lihaooye</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lihaooye]]></copyright><item><title><![CDATA[手动引入第三方jar包并用maven打包]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/134061727</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/134061727</guid><author>lihaooye</author><pubDate>Thu, 26 Oct 2023 17:54:10 +0800</pubDate><description><![CDATA[选择刚才的 jar 包，引入即可。]]></description><category></category></item><item><title><![CDATA[Spring搭建swagger]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/134061607</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/134061607</guid><author>lihaooye</author><pubDate>Thu, 26 Oct 2023 17:49:37 +0800</pubDate><description><![CDATA[如果是使用springfox-swagger-ui，启动项目后的api文档访问路径是 /swagger-ui.html。是springfox-swagger的增强UI实现，我个人更推荐使用这个ui，api文档结构更加清晰，在线调试也很方便。Swagger的分组接口是通过后端配置不同的扫描包，将后端的接口，按配置的扫描包基础属性响应给前端。在swagger-ui中也可以通过分组来查看api文档。后端java的配置如下，指定分组名和各自要扫描的包。访问的url为 /doc.html。]]></description><category></category></item><item><title><![CDATA[1-nginx重新编译添加ssl模块--with-http_ssl_module]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/123077261</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/123077261</guid><author>lihaooye</author><pubDate>Tue, 22 Feb 2022 21:02:37 +0800</pubDate><description><![CDATA[首先执行下面代码


./configure --prefix=/usr/local/nginx  --with-http_stub_status_module  --with-http_ssl_module  --with-file-aio  --with-http_realip_module


make

千万别make install，否则就覆盖安装了

make完之后在objs目录下就多了个nginx，这个就是新版本的程序了

备份旧的nginx程序


cp /usr/local/nginx/s]]></description><category></category></item><item><title><![CDATA[MongoDB查看是否分片]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/121340389</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/121340389</guid><author>lihaooye</author><pubDate>Mon, 15 Nov 2021 18:31:16 +0800</pubDate><description><![CDATA[三种查看方式

Config 库中查询


db.collections.find(
						{
							[
								{'dropped': {$ne:true}}, 		// 没有被删除的
								{'name' '/dbname/'} 				// 根据数据库名进行模糊查询
							]
						}
)


查看数据分布


use dbname
db.colname.getShardDistribution() 		# 可以查看数据分布




最简答的方法


u.]]></description><category></category></item><item><title><![CDATA[kafka配置文件server.properties]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120221367</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120221367</guid><author>lihaooye</author><pubDate>Fri, 10 Sep 2021 14:27:54 +0800</pubDate><description><![CDATA[broker.id=0

host.name=192.168.2.232
port=9092

num.network.threads=3
num.io.threads=8
log.dirs=/opt/kafka/logs
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=64
log.retention.hours=72
.]]></description><category></category></item><item><title><![CDATA[linux下安装kafka]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120128592</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120128592</guid><author>lihaooye</author><pubDate>Mon, 06 Sep 2021 11:09:58 +0800</pubDate><description><![CDATA[1.将kafka安装包移入/opt/目录下并解压（其他目录也行）



2.启动zookeeper

启动zk有两种方式，第一种是使用kafka自己带的一个zk。


bin/zookeeper-server-start.sh  config/zookeeper.properties 

另一种是使用其它的zookeeper，可以位于本机也可以位于其它地址。

这种情况需要修改config下面的sercer.properties里面的zookeeper地址 。例如zookeeper.connect=19..]]></description><category></category></item><item><title><![CDATA[linux下安装zookeeper]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120102549</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120102549</guid><author>lihaooye</author><pubDate>Sat, 04 Sep 2021 17:18:53 +0800</pubDate><description><![CDATA[1.首先将安装包放入linux /opt/目录下



2.解压



3.编辑配置文件 将conf 目录下的 zoo_sample.cfg复制为zoo.cfg

进入zoo.cfg进行编辑



修改以下内容：


dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log

注意：如果想配置集群的话，请在clientPort下面添加服务器的ip。如

server.1=192.168.180.132:2888:3888
server....]]></description><category></category></item><item><title><![CDATA[linux下安装tomcat]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120078048</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120078048</guid><author>lihaooye</author><pubDate>Fri, 03 Sep 2021 11:39:37 +0800</pubDate><description><![CDATA[1.再linux下传入tomcat并移动到/opt/目录下





2.进入到tomcat的bin目录下



运行startup.sh启动tomcat



现在linux的本地浏览是可以访问到tomcat的

3.开放端口8080 这样外网才能访问到tomcat

1）查看防火墙状态



2）重启防火墙



可以看到 防火墙已经重启

3）开放8080端口




firewall-cmd --zone=public --add-port=8080/tcp --permanent



--...]]></description><category></category></item><item><title><![CDATA[linux下安装jdk]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120077386</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120077386</guid><author>lihaooye</author><pubDate>Fri, 03 Sep 2021 11:18:06 +0800</pubDate><description><![CDATA[1.首先再linux下传入jdk 然后将jdk移动到/opt/目录下并解压





2.配置环境变量 vim /etc/profile



3.查看当前运行级别：



如果在3运行级别 ，logout 注销用户

再次打开 就可以使用java命令

编写一个简单的程序 测试一下：







可以看到测试成功 jdk已经安装成功！
...]]></description><category></category></item><item><title><![CDATA[安装使用lrzsz]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120076195</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120076195</guid><author>lihaooye</author><pubDate>Fri, 03 Sep 2021 11:01:37 +0800</pubDate><description><![CDATA[lrzsz是一款程序，在linux中可以代替ftp的上传和下载

安装lrzsz


yum install -y lrzsz




上传：rz
将文件上传到本地，默认上传到当前目录
该程序支持拖拽上传，如下图所示



上传后 查看本地：



下载的话直接 sz filename就行了






...]]></description><category></category></item><item><title><![CDATA[数据库表结构设计]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/120034907</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/120034907</guid><author>lihaooye</author><pubDate>Wed, 01 Sep 2021 11:04:42 +0800</pubDate><description><![CDATA[做一个项目，必然是少不了数据库设计的！在学习阶段，基本都是单表。然而在实际开发过程中，一对多，多对多的表处处都是！简单整理一下，一对多，多对多表如何设计整理一下思路：

数据库实体间有三种对应关系：一对一，一对多，多对多。

一对多：一的主键放在多种



比如一个用户有多个商户 则把用户id放入商户表中

多对多：在多对多关系中，用两个外键来创建一个新表。已存的旧表通过这个新表来发生联系。

通过学生选课了解多对多问题的处理：



在多对多中在一个表中添加一个字段就行不通了，所以处理多对多表问...]]></description><category></category></item><item><title><![CDATA[@ControllerAdvice注解]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119948193</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119948193</guid><author>lihaooye</author><pubDate>Fri, 27 Aug 2021 10:55:14 +0800</pubDate><description><![CDATA[@ControllerAdvice，是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理

统一异常处理

需要配合@ExceptionHandler使用。
当将异常抛到controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面


//全局异常捕捉处理
@ControllerAdvice
public class CustomExceptionHan]]></description><category></category></item><item><title><![CDATA[观察者模式]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119896108</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119896108</guid><author>lihaooye</author><pubDate>Tue, 24 Aug 2021 18:26:34 +0800</pubDate><description><![CDATA[观察者模式又称 发布订阅模式 当对象间存在一对多关系时，则使用观察者模式（Observer Pattern）。比如，当一个对象被修改时，则会自动通知依赖它的对象。观察者模式属于行为型模式。

优点：

降低了目标与观察者之间的耦合关系，两者之间是抽象耦合关系。符合依赖倒置原则。
	目标与观察者之间建立了一套触发机制。
缺点：

目标与观察者之间的依赖关系并没有完全解除，而且有可能出现循环引用。
	当观察者对象很多时，通知的发布会花费很多时间，影响程序的效率。
实现观察者模式时要注意具体目标对象和具体观察..]]></description><category></category></item><item><title><![CDATA[linux下安装MongoDB]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119840842</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119840842</guid><author>lihaooye</author><pubDate>Sat, 21 Aug 2021 16:34:35 +0800</pubDate><description><![CDATA[一、下载安装包

官网地址：https://www.mongodb.com/

二、安装mongodb

1、使用Xftp将压缩包上传到指定目录下：


cd /usr/local/
mkdir mongodb




然后解压文件

2、创建mongodb数据存储文件和日志文件


cd /usr/local/mongodb/
mkdir data
mkdir logs
cd ./logs
touch mongodb.log
cd ../
mkdir etc
cd etc
touch mongodb.c.]]></description><category></category></item><item><title><![CDATA[MongoDB update.setOnInsert()说明]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119823728</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119823728</guid><author>lihaooye</author><pubDate>Fri, 20 Aug 2021 15:48:50 +0800</pubDate><description><![CDATA[$setOnInsert指令往往同upsert、$set指令配合使用。mongodb官网说明：




如果upsert设为true。当满足查询条件的记录存在，则不执行$setOnInsert中的操作，当满足条件的记录不存在则执行$setOnInsert操作。与$set指令配合使用，可以作为$set指令的补充。当满足查询条件的记录存在，则执行 $set操作，当满足查询条件的记录不存在，则新增一条记录。



如图所示 如果查询的数据中有gmtCreate 数据 则啥也不做 否则设置gmtCrea...]]></description><category></category></item><item><title><![CDATA[SpringBoot---WebMvcConfigurer详解]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119750458</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119750458</guid><author>lihaooye</author><pubDate>Tue, 17 Aug 2021 10:25:04 +0800</pubDate><description><![CDATA[1. 简介

WebMvcConfigurer配置类其实是Spring内部的一种配置方式，采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制，可以自定义一些Handler，Interceptor，ViewResolver，MessageConverter。基于java-based方式的spring mvc配置，需要创建一个配置类并实现WebMvcConfigurer接口；

在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加.]]></description><category></category></item><item><title><![CDATA[MongoTemplate查询之排序分页]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119735831</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119735831</guid><author>lihaooye</author><pubDate>Mon, 16 Aug 2021 16:17:27 +0800</pubDate><description><![CDATA[Query query = new Query();
    Criteria criteria = Criteria.where("id").is(id);
    query.addCriteria(criteria);
    query.skip((pageNum - 1) * pageSize);
    query.limit(pageSize);
    query.with(Sort.by(
            Sort.Order.asc("XXX"),
            S..]]></description><category></category></item><item><title><![CDATA[关于Request获取路径的总结]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119642825</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119642825</guid><author>lihaooye</author><pubDate>Thu, 12 Aug 2021 14:01:10 +0800</pubDate><description><![CDATA[本文章主要讨论以下几种request获取路径的方法：


request.getServletPath()
request.getPathInfo()
request.getContextPath()
request.getRequestURI()
request.getRequestURL()
request.getServletContext().getRealPath()


以一个简单的例子说明：
web.xml配置（注意此处的url-pattern项）


&lt;?xml version="1.]]></description><category></category></item><item><title><![CDATA[Java注解详解]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119388541</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119388541</guid><author>lihaooye</author><pubDate>Wed, 04 Aug 2021 17:13:01 +0800</pubDate><description><![CDATA[今天代码review，发现很多冗余的代码，所以领导让在每个接口上面增加一个注解 标注这个接口的版本号，如果当前项目的版本号小于接口的版本号 接口就弃用 如果想让接口弃用 就把接口的版本号设置为Integer.MAX_VALUE。在这里我复习了一下注解的相关知识。

Java注解是什么

代码中特殊的标记，这些标记可以在编译，类加载和运行中读取，并执行相应的处理。

Java元注解

标记在注解上的注解，对注解进行描述和约束。


	@Target
	
@Target(ElementType.ANNOTATI]]></description><category></category></item><item><title><![CDATA[01-Optional类相关用法]]></title><link>https://blog.youkuaiyun.com/lihaooye/article/details/119359826</link><guid>https://blog.youkuaiyun.com/lihaooye/article/details/119359826</guid><author>lihaooye</author><pubDate>Tue, 03 Aug 2021 21:42:12 +0800</pubDate><description><![CDATA[Guava为了避免空指针引入了optional类，但是java8后来也引入了optional,所以我们直接讲一下java8的optional

本质上，这是一个包含有可选值的包装类，这意味着 Optional 类既可以含有对象也可以为空。

首先，创建Optional对象有三种方式：


// 1.创建空的Optional对象
Optional.empty();

// 2.使用非null值创建Optional对象
Optional.of("Wallace");

// 3.使用任意值创建Optional对]]></description><category></category></item></channel></rss>