<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Run the ant]]></title><description><![CDATA[我曾写过的每一行代码，都是对现实世界的序列化，所以我要尽自己最大的努力，让序列化后的世界更美一点！]]></description><link>https://blog.youkuaiyun.com/wangyijie521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangyijie521]]></copyright><item><title><![CDATA[Spring实现如果注册了子类则父类不再注册]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/132182931</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/132182931</guid><author>wangyijie521</author><pubDate>Wed, 09 Aug 2023 10:41:37 +0800</pubDate><description><![CDATA[这样写完，所有引用UserService的地方不需要修改，实现就会自动改为子类。1、在父类的代码上加上注解@ConditionalOnMissingBean。该方法可以用在某些扩展场景中，便于业务扩展。2、如果要进行扩展的时候，就集成这个类。]]></description><category></category></item><item><title><![CDATA[JPA连接达梦数据库导致auto-ddl失效问题解决]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/131942526</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/131942526</guid><author>wangyijie521</author><pubDate>Wed, 26 Jul 2023 16:56:03 +0800</pubDate><description><![CDATA[这个映射部分源码要跟的很深，总的来说就是从数据库拿到的表名都是小写的，但是匹配的时候是将实体类上@Table的name值转为大写后再进行映射，而且这个是在达梦数据库的驱动里面设置的，重写方言的buildIdentifierHelper方法也没用。项目使用了JPA，并且auto-ddl设置的为update，在连接达梦数据库的时候，第一次启动没有问题，但是后面重启就会报错，发现错误为重复建表，也就是说已经建好的表没有检测到，又重新走的建表流程。1、达梦数据库创建数据库实例的时候使用默认的规则，区分大小写。]]></description><category></category></item><item><title><![CDATA[JpaRepository.save()居然调用了2次insert?]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/124672154</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/124672154</guid><author>wangyijie521</author><pubDate>Mon, 09 May 2022 19:00:37 +0800</pubDate><description><![CDATA[先描述一下场景：

我需要对用户实体进行数据鉴权，所以期望的是监听用户的save()方法执行后，同步执行新增数据权限，并且给对应的用户分配该数据权限。

问题来了，在没有做数据权限前，save方法执行正常，加入了监听器之后，save方法就insert了2次，然后就是报主键冲突（因为是同一个对象）。

看一下实现：

第一步，创建用户实例



第二步，创建监听器



第三步，User对象注册监听器



第四步，开始测试



可以看到，一模一样的数据被insert了2次。然后跟到源码查了一下原因，...]]></description><category></category></item><item><title><![CDATA[你的applicationContext.getResources(source)为什么只拿到了一个配置文件？]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/124190464</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/124190464</guid><author>wangyijie521</author><pubDate>Fri, 15 Apr 2022 11:20:40 +0800</pubDate><description><![CDATA[解决applicationContext.getResources(source)只拿到了一个配置文件]]></description><category></category></item><item><title><![CDATA[Parent ‘Unknown:Unknown:Unknown‘ has problems 异常的处理]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/123330019</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/123330019</guid><author>wangyijie521</author><pubDate>Mon, 07 Mar 2022 15:02:32 +0800</pubDate><description><![CDATA[maven无法引入依赖，导致的项目编译报错]]></description><category></category></item><item><title><![CDATA[JSON数据生成扁平化字段名]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/112845850</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/112845850</guid><author>wangyijie521</author><pubDate>Tue, 19 Jan 2021 16:21:58 +0800</pubDate><description><![CDATA[用标准规则生成扁平化数据是无法直接作为数据库的列名定义的，如果想直接用于列名定义请查看，如果想用标准化的扁平化方案，请搜索JsonFlattener的使用


    /**
     * JSON扁平化总入口
     *
     * 会将所有的_去除
     * 会将_后的第一个字母大写
     * @param json
     * @return
     */
    public static JSONArray unfold(String json) {
        if (jso]]></description><category></category></item><item><title><![CDATA[根据JSON数据自动生成ClickHouse的Insert语句]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/112845605</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/112845605</guid><author>wangyijie521</author><pubDate>Tue, 19 Jan 2021 16:15:32 +0800</pubDate><description><![CDATA[如果你还不知道怎么建表请移步根据JsonSchema生成阿里云ClickHouse建表语句

这里就直接贴代码了，建表的规则，字段规则都在上方链接


    private static final String SCHEMA_TYPE = "type";
    private static final String SCHEMA_TYPE_OBJECT = "object";
    private static final String SCHEMA_TYPE_ARRAY = "array";
 .]]></description><category></category></item><item><title><![CDATA[根据JsonSchema生成阿里云ClickHouse建表语句]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/112845279</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/112845279</guid><author>wangyijie521</author><pubDate>Tue, 19 Jan 2021 16:11:04 +0800</pubDate><description><![CDATA[mybatis对ClickHouse的支持不是很好，JPA又没有对应的方言，做数仓需要大批量解析JSON数据，希望能自动根据JSONSchema定义来自动建表，节省工作量，并且不用为了复杂JSON建对象，还要服务发版。这个工具应用场景可能不是那个多，希望能帮到你，自己写也挺麻烦的。如果想要获取根据JSON数据生成Insert语句的同学请查看下一篇文章



生成规则

1、表数量与JsonSchema的properties节点数保持一致

2、数据类型转换：


			schemaType
			
...]]></description><category></category></item><item><title><![CDATA[根据JsonSchema生成数据库表名]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/112844717</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/112844717</guid><author>wangyijie521</author><pubDate>Tue, 19 Jan 2021 16:01:24 +0800</pubDate><description><![CDATA[生成方式

根据JsonSchema的各层级的key，用下划线拼接


    private static final String SCHEMA_TYPE = "type";
    private static final String SCHEMA_TYPE_OBJECT = "object";
    private static final String SCHEMA_TYPE_ARRAY = "array";
    private static final String SCHEMA_TYP]]></description><category></category></item><item><title><![CDATA[如何自己写一个lambda方法来完成多线程批量处理数据]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/109251331</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/109251331</guid><author>wangyijie521</author><pubDate>Fri, 23 Oct 2020 23:04:44 +0800</pubDate><description><![CDATA[最近要做一个初始版的数据仓库项目，有一大批的MYSQL基础数据要通过整合后写入到ES，有部分数据量非常庞大，单线程批量写入会耗时很久，就想到了使用线程池来多线程做写入操作。

这个写法不要局限于我这个应用场景，别的应用场景也可以修改一下里面的逻辑。

java版本要求在 1.8以上

附代码：


import org.apache.commons.collections.CollectionUtils;

import java.util.List;
import java.util.concurrent]]></description><category></category></item><item><title><![CDATA[Spring的容器创建过程，refresh()方法的执行]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/84954983</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/84954983</guid><author>wangyijie521</author><pubDate>Tue, 11 Dec 2018 14:53:09 +0800</pubDate><description><![CDATA[
public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// Prepare this context for refreshing.
			prepareRefresh();

			// Tell the sub...]]></description><category></category></item><item><title><![CDATA[SpringBoot应用AOP及各注解的执行顺序]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/84951558</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/84951558</guid><author>wangyijie521</author><pubDate>Tue, 11 Dec 2018 11:17:57 +0800</pubDate><description><![CDATA[首先第一步，POM引入jar


		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;spring-boot-starter-aop&amp;lt;/artifactId&amp;gt;
		&amp;lt;/dependency&amp;gt;

		&amp;lt;dependency...]]></description><category></category></item><item><title><![CDATA[org.apache.commons.httpclient.ConnectTimeoutException异常]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/83410259</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/83410259</guid><author>wangyijie521</author><pubDate>Fri, 26 Oct 2018 09:56:33 +0800</pubDate><description><![CDATA[org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms
    at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSock...]]></description><category></category></item><item><title><![CDATA[必须要会的SQL优化方法]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/83309820</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/83309820</guid><author>wangyijie521</author><pubDate>Tue, 23 Oct 2018 17:07:13 +0800</pubDate><description><![CDATA[1.对查询进行优化，要尽量避免全表扫描，首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断，否则将导致引擎放弃使用索引而进行全表扫描，如：


select id from t where num is null


最好不要给数据库留NULL，尽可能的使用 NOT NULL填充数据库.

备注、描述、评论之类的...]]></description><category></category></item><item><title><![CDATA[线程轮询的有数据启动，无数据停止，节省服务器资源，线程的启动和暂停]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/82699492</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/82699492</guid><author>wangyijie521</author><pubDate>Fri, 14 Sep 2018 11:24:40 +0800</pubDate><description><![CDATA[现实场景有这样一个需求：

某工作大厅，有几百个工作人员，当有某个工作人员向离岗出去，要点击自己工位上的暂离按钮，回岗的时候点击工位上的回岗按钮，如果离岗超过20分钟还没有回岗则短信提醒该工作人员离岗超时，该回岗了！

我们需要怎么处理这个业务呢？

首先要有一个缓存Map，存放工作人员的userid和超时时间。

然后针对该Map提供数据删除和添加的方法，回岗就删除，离岗就添加。

最后再起一个...]]></description><category></category></item><item><title><![CDATA[数据库和数据库实例的概念]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/82146997</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/82146997</guid><author>wangyijie521</author><pubDate>Tue, 28 Aug 2018 14:24:54 +0800</pubDate><description><![CDATA[很多人都把这两个概念弄混淆，认为MySQL是数据库，也是数据库实例。这样的理解在应用到Oracle和SQL Server的时候可能是正确的，但是再MySQL的体系结构中确是不适用的。

那么从概念上理解，该如何区分数据库和数据库实例呢？

数据库：

数据库是文件的集合，是依照某种数据模型组织起来并存放于二级存储器中的数据集合；

数据库实例：

数据库实例是程序，是位于用户和操作系统之间的一层数...]]></description><category></category></item><item><title><![CDATA[系统初始化功能扩展，一个具有良好扩展性的初始化工厂！代码其实可以写的更美~]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/81867814</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/81867814</guid><author>wangyijie521</author><pubDate>Mon, 20 Aug 2018 14:47:21 +0800</pubDate><description><![CDATA[上篇文章是关于Spring容器初始化以及根据容器获取bean的方法扩展等，然后涉及到系统初始化工厂，说在下一篇文章说一下这个问题。

有兴趣可以了解一下上篇文章：Spring容器初始化，根据容器获取Bean，初始化工厂应该在什么时候运行

一个好的顶层设计，一个好的设计模式，一个合适的设计模式，会让这块的业务更加明确，功能更加完善，代码更好梳理，让开发更加简单，让代码更加优美~

那么，怎么写好一...]]></description><category></category></item><item><title><![CDATA[关于初始化Spinrg容器、获取Spring容器实例及根据Spring容器获取Bean]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/81774301</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/81774301</guid><author>wangyijie521</author><pubDate>Fri, 17 Aug 2018 11:36:04 +0800</pubDate><description><![CDATA[上篇文章说到了在tomcat启动后如何进行系统的初始化工作：

想看的可点击—— tomcat启动后进行系统初始化及系统销毁执行业务

关于Spring容器初始化及获取实例，就要用到2个容器了：

一个是ServletContext，一个是WebApplicationContext。

ServletContext是servlet容器。用于获取web.xml中配置的参数，或者其他用户。

WebA...]]></description><category></category></item><item><title><![CDATA[tomcat启动后进行系统初始化及系统销毁执行业务]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/81772788</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/81772788</guid><author>wangyijie521</author><pubDate>Fri, 17 Aug 2018 10:48:00 +0800</pubDate><description><![CDATA[有些时候，我们有某些业务，或者某些设置是需要在项目启动的时候要进行初始化，比如，自动SQL执行、初始化fastJSON序列化过滤器，初始化系统权限等等，还有在系统销毁的时候执行某些业务，这个时候就需要了解一下GenericServlet这个类的init方法和destory方法；

了解一下这个类，这个类是一个抽象类，要想对这个类进行扩展就需要实现这个类的所有抽象方法，看看这个类的方法：

dest...]]></description><category></category></item><item><title><![CDATA[Nginx快速应用及数据库、Websocket长连接反向代理]]></title><link>https://blog.youkuaiyun.com/wangyijie521/article/details/81703745</link><guid>https://blog.youkuaiyun.com/wangyijie521/article/details/81703745</guid><author>wangyijie521</author><pubDate>Wed, 15 Aug 2018 15:00:06 +0800</pubDate><description><![CDATA[1、下载安装包

下载nginx:   http://nginx.org/download/nginx-1.10.3.tar.gz

下载openssl : http://www.openssl.org/source/openssl-fips-2.0.9.tar.gz

下载zlib    : http://zlib.net/zlib-1.2.11.tar.gz

下载pcre    : ftp:...]]></description><category></category></item></channel></rss>