hero image

浅海拾贝

寻找未知的技术拼图

zhi
自带插件和博客的思源笔记主题
jvue
Spring boot和Vue的最佳实践
zhi-blog
一个基于思源笔记api和Nuxt3的博客
openkm
新一代轻量级、插件化的开源知识管理平台
comment
一个支持vuepress1的多平台评论插件
sy-post-publisher
将思源笔记的文章发布到支持的平台
plugin-container
基于SpringBoot的插件化容器
spring-vue-ssr
Spring Boot配合Vue实现服务端渲染
IDEA自定义Maven的archetype

在创建 Maven 的项目时我们发现了一个很不方便的问题,就是每次创建 Maven 的工程的时候,都需要选择一个骨架,但是每个骨架都需要删除一部分东西才行,这样的话实在是太不方便了。

为什么要自定义 archetype

在创建 Maven 的项目时我们发现了一个很不方便的问题,就是每次创建 Maven 的工程的时候,都需要选择一个骨架,但是每个骨架都需要删除一部分东西才行,在平时开发中,如果是分布式项目,有可能会频繁创建子项目,每次都要删除不要的文件然后拷贝我们要的文件,例如弹簧配置,web.xml 中配置等。这样做不仅会浪费大量时间,拷贝和删除文件也容易导致错误的发生,比如漏拷某文件。


Terwer...大约 4 分钟经验分享骨架创建ideamavenarchetype
MyBatis-RedisCache源码分析

回顾

在前面,我们通过 redis​ 集成了 MyBatis​ 的二级缓存,440.MyBatis的二级缓存整合redis ,接下来,我们来分析一下 RedisCache​ 的源码。

源码分析

RedisCache 主要是通过实现 Cache 接口来做的。数据存储和获取主要是通过操作 jedis 来实现。

public final class RedisCache implements Cache {
    private final ReadWriteLock readWriteLock = new DummyReadWriteLock();
    private String id;
    private static JedisPool pool;

    public RedisCache(String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        } else {
            this.id = id;
            RedisConfig redisConfig = RedisConfigurationBuilder.getInstance().parseConfiguration();
            pool = new JedisPool(redisConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getConnectionTimeout(), redisConfig.getSoTimeout(), redisConfig.getPassword(), redisConfig.getDatabase(), redisConfig.getClientName());
        }
    }
}

Terwer...大约 2 分钟MyBatis后端开发开源框架通过方法分析实现读取
MyBatis的二级缓存整合redis

MyBatis 自带的二级缓存存在的问题

在前面我们使用 @CacheNamespace​ 实现了 430.MyBatis的二级缓存 ,这个底层使用 HashMap​ 来实现。在 单机环境 下没有问题,但是在 分布式环境 下就不行了。


Terwer...大约 2 分钟MyBatis后端开发开源框架二级缓存使用问题加上环境
Java获取url中参数

方案

在 Java 中,你可以利用 URLEncoder ​ ​和 URLDecoder ​ ​来对 URL 字符串进行编解码,然后使用 String.split()​ 方法或者使用 正则表达式​ 来从 URL 字符串中获取参数。

代码示例

/**
 * 获取url中的参数
 *
 * @param url 链接
 * @param key 参数key
 * @return 参数值
 */
public static String getParameterFromUrl(String url, String key) {
	String[] params = url.split("\\?");
	String[] queryParams = params[1].split("&");

	String result = "";
	for (String queryParam : queryParams) {
		String[] param = queryParam.split("=");
		// System.out.println("key: " + param[0] + " value: " + param[1]);
		if (param[0].equals(key)) {
			result = param[1];
			break;
		}
	}

	return result;
}

Terwer...大约 1 分钟经验分享参数获取字符串使用方案
2023-02-02-日记

pnpm 更新可以使用下面脚本

npm rm -g pnpm​ 之后在重新 npm i -g pnpm​ 就可以了。


Terwer...小于 1 分钟timeline可以更新使用下面脚本
2022-12-16-日记
  • iTab太恶心了,每次点击收藏的链接都会发送请求。很难不让人猜想,这是不是在收集用户数据。纯属流氓软件。


Terwer...小于 1 分钟timeline恶心每次点击收藏链接timeline
挂件模式用挂载菜单的方式使用

新特性

feat: #213 挂件模式用挂载菜单的方式使用 0.4.2

fix: #282 发布菜单新增只读预览与管理所有文档按钮,美化图标 0.5.1

使用方法

首先在设置 - 集市 - 挂件 中下载 sy-post-publisher

点击设置 - 外观- 代码片段,代码片段加上下面的 js​ 片段,然后重启思源

import("/widgets/sy-post-publisher/lib/siyuanhook.js")

Terwer...小于 1 分钟sy-post-publisher作品展示挂件模式挂载菜单方式
2
3
4
5
...
37