https://cdn.jsdelivr.net/gh/lewky/lewky.github.io@master/images/avatar.jpg

雨临Lewis的博客

日志框架与门面模式

日志框架

目前的日志框架可以分为两种:一种是jdk自带的,一种是第三方实现的。

第三方的日志框架除了提供具体的日志实现外,也有的会提供自身框架的接口。此外,有些日志框架仅仅提供了一套统一的接口,不包含具体的日志实现,可以通过一些桥接包来调用其他的日志框架。(即日志的门面模式)

Hugo系列(3.3) - LoveIt主题美化与博客功能增强 · 第四章

前言

本博客使用的是Hugo的LoveIt主题,本文也是基于该主题而写的,不过Hugo的美化步骤应该大同小异,版本如下:

1
2
3
4
5
hexo: 3.8.0

hugo: v0.74.2/extended windows/amd64 BuildDate: unknown

LoveIt: v0.2.10

请注意,本文的所有功能都离不开两个新增加的文件:_custom.scsscustom.js,部分功能还需要jquery,在第一章中会提及如何引入。

另外本文篇幅太长,阅读体验不好,将其进行分章如下:

SpringBoot问题汇总

使用Log4j2日志替代默认的Logback

SpringBoot默认使用Logback打印日志,出于性能考虑想要改用Log4j2,需要修改POM中的依赖,移除默认的Logback依赖:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
 
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

LeetCode - SQL题目

627. Swap Salary

题目

https://leetcode.com/problems/swap-salary/description/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Salary table:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
+----+------+-----+--------+

Result table:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |
+----+------+-----+--------+
(1, A) and (3, C) were changed from 'm' to 'f'.
(2, B) and (4, D) were changed from 'f' to 'm'.

sex字段是枚举类型,只有m和f两种值,现在要求只能用一个简单的update语句来将表中数据的sex字段的值对调,即m变为f,f变为m;不允许使用select之类的语句。

PowerMock问题汇总

PowerMock报错导致无法运行测试类

在执行单元测试时报错如下:

1
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not a subtype

在Stack Overflow上找到了同样的错误,该报错是在使用了PowerMock框架后发生的,奇怪的是,某些同样使用该框架的测试类却不会报错,暂时不明白抛出该异常的根本原因,先记录下解决方法。

Spring问题汇总

org.springframework.expression.spel.SpelEvaluationException: EL1030E

运行Spring项目时报错如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
org.springframework.expression.spel.SpelEvaluationException: EL1030E: The operator 'ADD' is not supported between objects of type 'java.lang.String' and 'null'
	at org.springframework.expression.spel.ExpressionState.operate(ExpressionState.java:240)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:80)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:85)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:83)
	at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:109)
	at org.springframework.expression.spel.standard.SpelExpression.getValue
....
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

iReport问题汇总

iReport无法正常启动

最近需要用到iReport报表工具,但是在启动客户端时却发现会闪退,无法正常启动。查找了资料,发现是因为iReport无法支持jdk 1.8,必须要修改配置文件,将java版本指定为1.7或之前的版本。目前官网最新的版本是5.6.0,据说有外国大神说是下个版本将会支持jdk 1.8。

IDEA问题汇总

前言

本文基于2021-2版本的IDEA。

启动时选择工作空间

File -> Settings... -> Appearance & Behavior -> System Settings -> 不勾选Reopen projects on startup

无法搜索或者下载插件

File -> Settings... -> Plugins可以打开插件市场,搜索想要下载的插件,但是可能由于网络问题而无法成功搜索或者下载插件。此时需要设置代理来解决。