系统:Win10
JDK:1.8.0_333
IDEA:2020.3.4
在一次写 MyBatis 项目工程的时候,使用 Logback 打印日志时,发现控制台有输出乱码,乱码如下
[DEBUG] [main] o.a.i.l.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
[DEBUG] [main] o.a.i.io.VFS - Class not found: org.jboss.vfs.VFS
[DEBUG] [main] o.a.i.i.JBoss6VFS - JBoss 6 VFS API is not available in this environment.
[DEBUG] [main] o.a.i.io.VFS - Class not found: org.jboss.vfs.VirtualFile
[DEBUG] [main] o.a.i.io.VFS - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
[DEBUG] [main] o.a.i.io.VFS - Using VFS adapter org.apache.ibatis.io.DefaultVFS
[DEBUG] [main] o.a.i.i.DefaultVFS - Find JAR URL: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/pojo
[DEBUG] [main] o.a.i.i.DefaultVFS - Not a JAR: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/pojo
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: User.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Listing file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/pojo
[DEBUG] [main] o.a.i.i.DefaultVFS - Find JAR URL: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/pojo/User.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Not a JAR: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/pojo/User.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: ���� 4 I
[DEBUG] [main] o.a.i.i.ResolverUtil - Checking to see if class com.lijinjiang.pojo.User matches criteria [is assignable to Object]
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.i.DefaultVFS - Find JAR URL: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper
[DEBUG] [main] o.a.i.i.DefaultVFS - Not a JAR: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: UserMapper.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: UserMapper.xml
[DEBUG] [main] o.a.i.i.DefaultVFS - Listing file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper
[DEBUG] [main] o.a.i.i.DefaultVFS - Find JAR URL: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper/UserMapper.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Not a JAR: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper/UserMapper.class
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: ���� 4
[DEBUG] [main] o.a.i.i.DefaultVFS - Find JAR URL: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper/UserMapper.xml
[DEBUG] [main] o.a.i.i.DefaultVFS - Not a JAR: file:/C:/Programming/Workspace/IDEA/TestLogback/target/classes/com/lijinjiang/mapper/UserMapper.xml
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: <?xml version="1.0" encoding="UTF-8" ?>
[DEBUG] [main] o.a.i.i.ResolverUtil - Checking to see if class com.lijinjiang.mapper.UserMapper matches criteria [is assignable to Object]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Opening JDBC Connection
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Created connection 1863702030.
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Setting autocommit to false on JDBC Connection [[email protected]]
[DEBUG] [main] c.l.m.U.selectAll - ==> Preparing: select * from tb_user;
[DEBUG] [main] c.l.m.U.selectAll - ==> Parameters:
[DEBUG] [main] c.l.m.U.selectAll - <== Total: 3
[User{
id=1, username='古天乐', password='123456', gender='男', address='香港'}, User{
id=2, username='刘亦菲', password='123456', gender='女', address='湖北'}, User{
id=3, username='胡歌', password='123456', gender='男', address='上海'}]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Resetting autocommit to true on JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Closing JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Returned connection 1863702030 to pool.
先贴出来我的 mybatis 配置信息
<!-- 类型别名 -->
<typeAliases>
<package name="com.lijinjiang.pojo"/>
</typeAliases>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<!-- 包扫描 -->
<package name="com.lijinjiang.mapper"/>
</mappers>
在一番尝试后,我发现,这里的乱码和 mybatis 的配置信息有关,当我的 类型别名(typeAliases)和 映射器(mappers)配置成包扫描模式的时候(package),就会出现这样的乱码
所以我尝试将这两个配置恢复成单个配置项
<!-- 类型别名 -->
<typeAliases>
<typeAlias type="com.lijinjiang.pojo.User" alias="User"/>
</typeAliases>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<!-- 加载指定的 SQL 映射文件-->
<mapper resource="com/lijinjiang/mapper/UserMapper.xml"/>
</mappers>
然后就发现控制台的乱码果然就消失了
[DEBUG] [main] o.a.i.l.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Opening JDBC Connection
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Created connection 1626343059.
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Setting autocommit to false on JDBC Connection [[email protected]]
[DEBUG] [main] c.l.m.U.selectAll - ==> Preparing: select * from tb_user;
[DEBUG] [main] c.l.m.U.selectAll - ==> Parameters:
[DEBUG] [main] c.l.m.U.selectAll - <== Total: 3
[User{
id=1, username='古天乐', password='123456', gender='男', address='香港'}, User{
id=2, username='刘亦菲', password='123456', gender='女', address='湖北'}, User{
id=3, username='胡歌', password='123456', gender='男', address='上海'}]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Resetting autocommit to true on JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Closing JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Returned connection 1626343059 to pool.
但是这种方法治标不治本,以后做大工程的时候,不可能一项一项配置别名和映射文件,所以我们得找出具体的原因,然后从根本上解决这个问题
这时候,我们回到打印乱码的位置,看下能不能获得啥有用的信息
[DEBUG] [main] o.a.i.i.DefaultVFS - Reader entry: ���� 4 I
这里我们可以看到是 DefaultVFS 类输出的这条信息,那么 DefaultVFS 是什么呢?
VFS 全称是 Virtual File System,他是一个虚拟的文件系统,为读取不同存储介质中的文件和数据提供一个统一的API方法
在 mybatis 中,VFS 定义了访问程序宿主机资源的 API 接口,这些资源包括:jar 包,class 文件,配置文件等
mybatis 内置了两种 VFS 实现:JBoss6VFS 和 DefaultVFS
public static final Class<?>[] IMPLEMENTATIONS = {
JBoss6VFS.class, DefaultVFS.class };
其中 JBoss6VFS 的实现依赖于 JBoss 6 的 VFS API,DefaultVFS 则是适用于大多数应用程序服务器的 VFS 的默认实现
这里打印乱码的就是 DefaultVFS ,我们就打开 DefaultVFS 文件,看看是哪里打印的这条信息
DefaultVFS 类的包路径为:org.apache.ibatis.io
我们通过打断点的方式进行调试,发现具体代码位置如下图所示
这里解释一下为什么这里会打印乱码现象
这里的 list 方法是用于递归获取指定路径下的所有资源列表
首先会把我们配置的包路径:com.lijinjiang.pojo 传递过来,找到了里面的 User.class,资源合法,放进 resources,然后下面会递归调用 list 方法,进入 User.class 内,这时候使用 readLine 方法读取一行数据就产生了乱码,还打印进了 debug 日志
这里出现乱码的原因是 DefaultVFS 导致的,那么我们换成 JBoss6VFS 试下,不过它的实现依赖于 JBoss 6 的 VFS API,所以我们需要先在 pom 里配置 jboss-vfs 的依赖
<!-- 添加 jboss-vfs 依赖 -->
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
<version>3.2.17.Final</version>
</dependency>
我们再运行一下程序就可以发现,乱码的日志不见了
[DEBUG] [main] o.a.i.l.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
[DEBUG] [main] o.a.i.io.VFS - Using VFS adapter org.apache.ibatis.io.JBoss6VFS
[DEBUG] [main] o.a.i.i.ResolverUtil - Checking to see if class com.lijinjiang.pojo.User matches criteria [is assignable to Object]
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.d.p.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[DEBUG] [main] o.a.i.i.ResolverUtil - Checking to see if class com.lijinjiang.mapper.UserMapper matches criteria [is assignable to Object]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Opening JDBC Connection
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Created connection 258535644.
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Setting autocommit to false on JDBC Connection [[email protected]]
[DEBUG] [main] c.l.m.U.selectAll - ==> Preparing: select * from tb_user;
[DEBUG] [main] c.l.m.U.selectAll - ==> Parameters:
[DEBUG] [main] c.l.m.U.selectAll - <== Total: 3
[User{
id=1, username='古天乐', password='123456', gender='男', address='香港'}, User{
id=2, username='刘亦菲', password='123456', gender='女', address='湖北'}, User{
id=3, username='胡歌', password='123456', gender='男', address='上海'}]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Resetting autocommit to true on JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.t.j.JdbcTransaction - Closing JDBC Connection [[email protected]]
[DEBUG] [main] o.a.i.d.p.PooledDataSource - Returned connection 258535644 to pool.
那么为什么换成 JBoss6VFS 就不打印乱码了呢?它代码里都不调用打印日志功能,我不打印总不会出错吧
所以,只要配置 jboss-vfs 的依赖即可
Install Docker on Raspberry PiSsh into the Pi or use the terminal application from the desktop on the Pi to get a Bash shell.# Docker install script$ curl -sSL https://get.docker.com | sh# add pi use...
<br />转【IT168 专稿】 三大指标 为你的ERP做健康体检<br /><br />指标一:数据的准确度<br /> 在给ERP系统进行体检的时候,最综合的指标就是数据的准确度。如果ERP系统相关的操作规范没有严格执行,那么最终反映到数据上,就是数据误差比较大。如仓库的帐上数量与实物不符等。具体的说,需要核对如下几组数据的准确率。<br /> 一是ERP系统帐上库存数量与实物数量的一致性。一般企业在年末都会对库存进行盘点。此时需要以ERP系统的数据为基础,对实物进行盘点,然后确定两者之间
layui 模板语法简单使用小例子layui 模板语法 函数调用<script type="text/html" id="collect"> {{# var fun = function() { if (d.checkflg == 1) { return '<a id="collection" lay-event="collection"><i class="layui-icon febs-e
一、简介核跟踪方法是目标跟踪的主要方法, 应用非常广泛。例如Meashift、Camshift 算法, 它直接运用最速下降法的原理, 向梯度下降方向对目标模板逐步迭代, 直到迭代到最优位置。它的核心就是一步一步迭代寻找最优点, 在跟踪中, 就是为了寻找相似度值最大的候选区间。本文主要介绍基于Meashift算法的目标跟踪的MATLAB实现,原理不再详细解释,具体原理可以参考文章结尾处的参考...
1.环境ubuntu18.04redis5.0.5SpringBoot2.3.12.redis配置安装redis及其他可参考 https://blog.csdn.net/qq_41169102/article/details/106653593redis配置文件修改1.修改protected-mode yes 改为:protected-mode no2.注释掉#bin 127.0.0.13.将 daemonize no 改成 yes4.设置密码 requirepass 12345
通过Bcrypt进行密码加密,然后通过spring security进行登录的验证,通过一星期的百度和测试,终于可以验证成功了,结果一出来,那可以说是相当的激动,赶紧记下着美妙的时刻!一、用户注册: 下载BCrypt.java文件,编写一下文件BcryptCipher.java package cn.pp.manager.system.utils;import org.apache....
大家好!我是上海航天局的一名退休研究员,40 多年从事结构分析和 CAE 工作的经历,使自己积累了不少工程经验和 CAE 软件 (主要是 ANSYS、Nastran 和 I-deas) 的使用经验。因为经常在多家工程网站上为朋友们解答一些 CAE 应用方面的问题,因而有些朋友建议我建立一个的博客,以方便 CAE 应用方面的交流,根据网友的建议,我在网易上开了一个博客 (http://htbbz...
用处可以随意调整组件显示的位置,个人觉得在嵌套组件中最方便举例app.component.tsimport { Component, ViewChild, TemplateRef,ViewContainerRef } from '@angular/core';@Component({ selector: 'app-root', styleUrls: ['./app.compone...
理论库变量size_t这是无符号整数类型,它是 sizeof 关键字的结果FILE这是一个适合存储文件流信息的对象类型。fpos_t这是一个适合存储文件中任何位置的对象类型库宏NULL这个宏是一个空指针常量的值。EOF这个宏是一个表示已经到达文件结束的负整数。库函数fclose/** 作用: 关闭流 stream。刷新所有的缓冲区。* 参数: stream -- 这是指向 FILE 对象的指针,该 FI
苦逼的周六,周六还得上班,上班就算了嘛,还来个突然停电,还好我用的android studio,停电我不怕,自动保存,哈哈…………但是……当我来电的时候惊奇的发现,东西是保存了,可是……所有关于android sdk和java jdk的东西都爆红了,红艳艳的一堆,试了几个方法都没有用,最后是把这两个文件夹删了并且重装了软件才弄好的。好是好了,可自己定义的界面效果没了,那就重新复习一遍and
Qt图形视图框架
本章主要讲的是数据预处理。正如我在第一章里给出的KDD的流程一样,在数据的预处理中,需要做数据清理、数据集成、数据归约、数据变化等操作。这里需要强调的一点的是,这些步骤并不是完全孤立的。意思就是说我们在做数据清理的时候可能也相当于做了一部分的数据归约和集成,并不是我对对数据进行清理的时候,数据就真的只被清理了,实际上数据同时也被归约了或者集成了。 这里在总结一下这几步的作用数据清理可以用来清楚数