<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[之城的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/leisurelen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; leisurelen]]></copyright><item><title><![CDATA[EasyExcel使用管道流连接InputStream和OutputStream]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/144434518</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/144434518</guid><author>leisurelen</author><pubDate>Thu, 12 Dec 2024 19:59:55 +0800</pubDate><description><![CDATA[Java中的InputSteam是程序从其中读取数据，是程序可以往里面写入数据。如果我们有在项目中读取数据库的记录， 在转存成Excel文件, 再把文件转存到OSS中。生成Excel使用的是阿里的EasyExcel。他支持Output的方式写出文件内容。而我使用的OSS的Client却只支持InputSteam的方式传入内容。这就需要我把excel的数据流从传输到中了。这就要用到JAVA中的管道流功能了。]]></description><category></category></item><item><title><![CDATA[使用Gradle编译前端的项目]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/144067690</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/144067690</guid><author>leisurelen</author><pubDate>Wed, 27 Nov 2024 15:29:35 +0800</pubDate><description><![CDATA[最近的项目都是使用Gradle来开发和编译的。由于个人项目前后端都有用到，我想放在一个项目中，于是有了这篇文章。我前端使用的Vue，后端使用kotlin , 框架使用的SpringBoot。]]></description><category></category></item><item><title><![CDATA[Linux学习， 进程和线程]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/139505963</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/139505963</guid><author>leisurelen</author><pubDate>Fri, 07 Jun 2024 09:10:14 +0800</pubDate><description><![CDATA[进程内部还可以包含有多个线程，线程基本没有自己独占的资源（独有栈除外），他与进程内的其他线程共享进程的资源。正在运行中的程序就是一个进程，进程有自己独有的内存空间和文件等等资源，进程中的资源一般都是相互隔离的。]]></description><category></category></item><item><title><![CDATA[Linux学习，单内核和微内核]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/139502292</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/139502292</guid><author>leisurelen</author><pubDate>Thu, 06 Jun 2024 15:57:46 +0800</pubDate><description><![CDATA[微内核则是将操作系统的核心功能分离出来，形成一个小的内核，只负责最基本的功能，如进程管理、内存管理等。这种设计架构的优点是内核体积小，易于维护和扩展，同时也提高了系统的可靠性和安全性。这种设计架构的优点是性能高，因为所有的功能都在同一个内核中实现，不需要进行上下文切换和进程间通信。但是，单内核的缺点也很明显，就是内核体积庞大，难以维护和扩展。Linux 操作系统属于单内核架构。但是，Linux 内核也吸收了微内核的一些优点，如模块机制和动态加载等，使得 Linux 内核具有更好的可扩展性和可维护性。]]></description><category></category></item><item><title><![CDATA[Sqlite在Mybatis Plus中关于时间字段的处理]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/138725534</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/138725534</guid><author>leisurelen</author><pubDate>Sat, 11 May 2024 18:43:09 +0800</pubDate><description><![CDATA[对象中有expire三个时间相关的字段。注意： 可以解决问题，但是需要在每个时间字段都加注解，比较繁琐， 不推荐。对象中加上注解如下：/***/) {= null) {Sqlite数据库有自己单独的字段类型处理方式， Mybatis对其支持并不完善， 从发现问题到解决问题我中间尝试了各种方法， 最终还是通过覆盖Mybatis的类来解决问题了。Sqlite对于时间自动转换成时间戳的方式也不太好，我改成了字符串的方式，查看和显示比较直观。]]></description><category></category></item><item><title><![CDATA[Sa-Token 整合Java17和SpringBoot]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/134485619</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/134485619</guid><author>leisurelen</author><pubDate>Sun, 19 Nov 2023 00:11:38 +0800</pubDate><description><![CDATA[之前无意中发现Sa-Token权限认证框架，项目十分好用。项目地址：我的个人项目使用的是Kotlin+JDK17+SpringBoot ， 于是我也想在这个项目中使用， 可是发现有很多的问题， 无法兼容17的jdk版本，主要原因是17版本都相关的包都更名成了，  于是进行了适当的改造。我的个人项目地址：本次修改的类路径：感兴趣的可以直接看源码。Java21已经发布了， 并且包含激动人心的虚拟线程功能， 要跟上时代的脚步。本文章解决的问题就是 Java17相关包名称修改导致的问题， 需要的了解相关。]]></description><category></category></item><item><title><![CDATA[JPA整合Sqlite解决Dialect报错问题， 最新版Hibernate6]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/134457183</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/134457183</guid><author>leisurelen</author><pubDate>Fri, 17 Nov 2023 10:35:38 +0800</pubDate><description><![CDATA[我个人项目中，不想使用太重的数据库，而内嵌数据库中SQLite又是最受欢迎的， 因此决定采用这个数据库。可是JPA并不支持Sqlite，这篇文章就是记录如何解决这个问题的。由于我个人比较喜欢使用最新版本的各种包，所以容易遇到各种问题， 多找找网络信息，多花点心思往往都容易找到解决方案的。]]></description><category></category></item><item><title><![CDATA[bep003-Torrent文件解析.md]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/134447346</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/134447346</guid><author>leisurelen</author><pubDate>Thu, 16 Nov 2023 17:56:31 +0800</pubDate><description><![CDATA[我对BT相关协议很感兴趣， 萌生了自己实现一个PT Tracker服务端的想法。顺便学习下Koitln语言， 于是有了这个项目，   本项目使用的是的框架组合方式。Bep003 协议是BT协议族的最基础协议。本篇先讲述下这个协议的内容， 在描述下本项目是怎么实现这个协议的。协议地址： https://www.bittorrent.org/beps/bep_0003.html文章中相关代码的开源地址： https://github.com/blanexie/vxph。]]></description><category></category></item><item><title><![CDATA[LogBack的日志报错解决办法 org.xml.sax.SAXNotRecognizedException]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/134338762</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/134338762</guid><author>leisurelen</author><pubDate>Fri, 10 Nov 2023 18:38:53 +0800</pubDate><description><![CDATA[LogBack的日志报错解决办法 org.xml.sax.SAXNotRecognizedException]]></description><category></category></item><item><title><![CDATA[Incompatible because this component declares an API of a component compatible with Java 异常]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/132719856</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/132719856</guid><author>leisurelen</author><pubDate>Wed, 06 Sep 2023 18:15:37 +0800</pubDate><description><![CDATA[No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute]]></description><category></category></item><item><title><![CDATA[树莓派安装openwrt旁路由开启ipv6]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/129977416</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/129977416</guid><author>leisurelen</author><pubDate>Wed, 05 Apr 2023 22:21:46 +0800</pubDate><description><![CDATA[最近对软路由有兴趣, 刚好手上有一个树莓派3B+, 于是就折腾下.]]></description><category></category></item><item><title><![CDATA[Sqlite的JSON字段的处理和全局异常拦截 Sqlite + Kotlin + Mybatis-Plus+Gradle(kts)项目]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/128990518</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/128990518</guid><author>leisurelen</author><pubDate>Sat, 11 Feb 2023 23:43:21 +0800</pubDate><description><![CDATA[Sqlite的JSON字段的处理和全局异常拦截  Sqlite + Kotlin + Mybatis-Plus+Gradle(kts)项目]]></description><category></category></item><item><title><![CDATA[SpringBoot + kotlin/java + Mybatis-Plus +Sqlite + Gradle多模块项目]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/128988743</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/128988743</guid><author>leisurelen</author><pubDate>Sat, 11 Feb 2023 21:33:22 +0800</pubDate><description><![CDATA[SpringBoot  + kotlin/java + Mybatis-Plus +Sqlite + Gradle多模块项目]]></description><category></category></item><item><title><![CDATA[MySQL字段长度修改 锁表情况分析]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/128416992</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/128416992</guid><author>leisurelen</author><pubDate>Fri, 23 Dec 2022 10:54:29 +0800</pubDate><description><![CDATA[修改mysql大表字段长度没有锁表的原因分析]]></description><category></category></item><item><title><![CDATA[树莓派Raspberry初始化设置ssh和wifi]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/127467888</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/127467888</guid><author>leisurelen</author><pubDate>Sat, 22 Oct 2022 22:03:42 +0800</pubDate><description><![CDATA[树莓派的初始wifi 和ssh设置]]></description><category></category></item><item><title><![CDATA[kafka消息发送者]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/126003945</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/126003945</guid><author>leisurelen</author><pubDate>Tue, 26 Jul 2022 22:59:49 +0800</pubDate><description><![CDATA[kafka不仅仅可以作为MQ消息系统来使用，也可以作为存储系统和流式处理平台使用。kafka使用磁盘顺序写入的基本机制来实现海量消息的处理和消息的有序性，同时也保证了消息不会丢失。kafka也是分布式的系统，使用zookeeper（2.8已经移除）来协调各个部分。分布式系统可以显著的提高系统的可用性，但是同时也为系统引入了数据一致性的挑战。为了达到高度的数据一致性，kafka又引入了副本备份的概念，保证在分布系统中某个模块出现问题而不会导致数据丢失。broker服务器。...]]></description><category></category></item><item><title><![CDATA[Ktor入门 -- 项目搭建与启动]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/123218721</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/123218721</guid><author>leisurelen</author><pubDate>Tue, 01 Mar 2022 23:32:31 +0800</pubDate><description><![CDATA[前言
Ktor是使用kotlin语音写的一个高性能web框架, 你可以类比认为 Tomcat 服务器.
本篇只是简单的说明 如何启动一个web服务 ,
项目结构
项目使用Gradle管理,  整个项目结果如下:

Gradle的包依赖管理
定义了kotlin 和 ktor的版本 , 并且引入了日志框架logback 和我最喜欢的工具包hutool
项目的最外部的build.gradle文件的内容如下:
buildscript {
    ext {
        kotlin_version = '1.5]]></description><category></category></item><item><title><![CDATA[领域, 子域和限界上下文]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/122334442</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/122334442</guid><author>leisurelen</author><pubDate>Thu, 06 Jan 2022 23:44:54 +0800</pubDate><description><![CDATA[前言
关于领域设计, 我也是初学者, 下方的诸多言论只是我个人理解想法, 并不一定是正确的.
限界上下文
限界上下文 是从复杂系统中划分模块的方法,  限界上下文的命名最好使用偏动词的方式, 这样方便开发者跳出数据库建模的架构影响.
在使用DDD思想的时候, 最好先抛弃框架, 数据库等等的约束, 先把设计做好, 最后在来考虑框架,
子域
限界上下文和 子域 最好保持一对一的关系,
电商系统 的模块划分
按照我之前的想法, 根据经验和直接我会把电商系统划分成:

用户模块
商品模块
订单模块
支付模块
库存模]]></description><category></category></item><item><title><![CDATA[＜实现领域驱动设计＞读书笔记]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/122333861</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/122333861</guid><author>leisurelen</author><pubDate>Wed, 05 Jan 2022 23:18:49 +0800</pubDate><description><![CDATA[前言
我作为程序员已经参与工作多年了,  从刚入门开始就被java的Controller Service Dao 三层的模式所支配.  刚开始也认为这三层的模式很好, 把视图, 业务, 持久化三层分开, 是一个很好的开发架构, 但是随着中间工作的变动, 参与的项目的变多, 我深切的感受到这个架构工作中的不便之处.
简单的项目

业务关系直接就在数据库表关系之间就直接实现了, Service Controller 就只有简单的一行, 取个数据给前端就可以, 感觉Service就是多余的.
一些简单的处理可以直]]></description><category></category></item><item><title><![CDATA[任务加入线程池是的生效和启动过程详解]]></title><link>https://blog.youkuaiyun.com/leisurelen/article/details/121808513</link><guid>https://blog.youkuaiyun.com/leisurelen/article/details/121808513</guid><author>leisurelen</author><pubDate>Thu, 16 Dec 2021 20:29:07 +0800</pubDate><description><![CDATA[前言
很早之前我就写过两篇关于线程池的博客,  但是这两篇博客的认识比较浅陋, 有很多需要订正的地方, 所以我决定新开一篇博客.
https://blog.youkuaiyun.com/leisurelen/article/details/107872827
https://blog.youkuaiyun.com/leisurelen/article/details/107872827
在这里我先简单描述下线程池的工作流程

加入一个Task, 如果没有达到核心线程数,  启动一个新Worker执行这个Task
再加入一个Task]]></description><category></category></item></channel></rss>