/images/avatar.jpg

雨临Lewis的博客

Java正则表达式问题汇总

正则表达式的模式修饰符

在正则表达式前面可以加上(?i)(?s)(?m)这三种模式修饰符,用以改变正则表达式的匹配模式。

(?i)表示匹配时不区分大小写。

(?s)表示Singleline(单行模式),匹配时会改变.的含义,使其能与换行符(\r或者\n,如果是\r\n需要用两个.)匹配。

(?m)表示Multiline(多行模式),匹配时会改变^$的含义,使其分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。

这三种模式修饰符可以搭配使用,如:(?im)(?is)等。

MySQL问题汇总

指定字符集编码

需要在数据库连接中指定两个参数:useUnicode=true&characterEncoding=UTF-8,只有当设置了useUnicode=true时,后续指定的字符集编码才有效。

MySQL 5.6别名默认不生效问题

在数据库连接中指定参数:useOldAliasMetadataBehavior=true

Spring Data MongoDB问题汇总

前言

Spring Data除了常用的JPA(Hibernate)关系型数据库的模块外,还有其他用于非关系型数据库的数据交互模块:比如Redis、MongoDB、Elasticsearch等。

用法和JPA模块类似,都需要定义对应的POJO、Repository,同时也提供了对应的数据库工具模板类:如RedisTemplate、MongoTemplate等。

本文基于以下版本:

1
2
3
4
5
6
<!--  对应的是4.1.1版本的MongoDB -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.4.0</version>
</dependency>

这是MongoDB官网用户手册的翻译文档仓库:MongoDB-4.2-Manual

日志框架与门面模式

日志框架

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

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

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

前言

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

1
2
3
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>

PowerMock问题汇总

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

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

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

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

Spring问题汇总

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。