继开 | 博客

热爱生活,努力学习,实现自己的价值


  • 短诗的序

  • 迷途自渡

  • 寒星三两

  • 林深见鹿

  • 记昨日书

  • 顾探往昔

Springboot 外部Jar包引用以及打包发布问题

发表于 2022-03-07
字数统计: 337 字 | 阅读时长 ≈ 1 min

引入方式

外部jar包引用方式很多,目前用的是pom.xml,dependence引用,方法如下

1
2
3
4
5
6
7
<dependency>
<groupId>com.aspose4</groupId>
<artifactId>com.aspose</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/itextpdf-5.5.6.jar</systemPath>
</dependency>

需要注意的是

1
2
3
4
5
<groupId>随便写,但是一定要是路径</groupId>
<artifactId>随便写是个名字就行,一定不要有.再里面,不然可能认定未路径,一定不能是路径</artifactId>
<version>随便写</version>
<scope>随便写</scope>
<systemPath>你存放jar包的路径</systemPath>

如给的例子,我的jar包是放在项目下面的lib文件下,jar包名称tibrvjsd.jar,路径就是${project.basedir}/lib/itextpdf-5.5.6.jar

打包配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope> <!-- 打包 将外部jar包打包进项目中 -->
</configuration>
</plugin>

我就是用此种方法成功将外部jar包引入自己项目的jar 的,部署后也可行。

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

基于Docker搭建Mycat环境实现Mysql数据库的读写分离

发表于 2022-03-05
字数统计: 2,320 字 | 阅读时长 ≈ 12 min

搭建环境

搭建Mysql主从服务

下载Mysql镜像

1
docker pull mysql:5.7

创建Mysql挂载目录

1
mkdir -p /opt/mysql/master/{conf,data,logs}
1
mkdir -p /opt/mysql/slave/{conf,data,logs}

进入conf目录中编辑my.cnf

主配置文件

1
2
3
4
5
6
7
8
9
10
11
12
[client]     
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置大小写不敏感
lower_case_table_names=1
server_id=66 ###服务器id
log-bin=mysql-bin ###开启日志文件

从配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置大小写不敏感
lower_case_table_names=1
server_id=88 ###服务器id
log-bin=mysql-bin ###开启日志文件
binlog_do_db=test

运行Mysql容器

1
docker run -it --name mysql-master -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /opt/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /opt/mysql/master/data:/var/lib/mysql -v /opt/mysql/master/logs:/var/log/mysql -d --restart=always mysql:5.7
1
docker run -it --name mysql-slave -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /opt/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /opt/mysql/slave/data:/var/lib/mysql -v /opt/mysql/slave/logs:/var/log/mysql -d --restart=always mysql:5.7

运行mysql容器也可用docker-compose启动yml

新建docker 网桥

1
docker network create --subnet=172.101.0.0/16 Mycat-net

主 Mycat-mysql57-master.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#mkdir -p /data/Mycat-mysql57-master/{conf,data,logs,mysql}
#docker-compose -f Mycat-mysql57-master.yml up -d
#Mycat-mysql57-master.yml 配置文件如下
version: "2"

services:
Mycat-mysql57-master:
image: mysql:5.7
ports:
- "3308:3306"
command: --default-authentication-plugin=mysql_native_password
volumes:
- /data/Mycat-mysql57-master/conf:/etc/mysql
- /data/Mycat-mysql57-master/logs:/var/log/mysql
- /data/Mycat-mysql57-master/data:/var/lib/mysql
- /data/Mycat-mysql57-master/conf/my.cnf:/etc/mysql/my.cnf
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
- MYSQL_ROOT_PASSWORD=root
restart: always
container_name: Mycat-mysql57-master
privileged: true
networks:
Mycat-net:
ipv4_address: 172.101.0.10
networks:
Mycat-net:
external: true

从 Mycat-mysql57-slave.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#mkdir -p /data/Mycat-mysql57-slave/{conf,data,logs,mysql}
#docker-compose -f Mycat-mysql57-slave.yml up -d
#Mycat-mysql57-slave.yml 配置文件如下
version: "2"

services:
Mycat-mysql57-slave:
image: mysql:5.7
ports:
- "3309:3306"
command: --default-authentication-plugin=mysql_native_password
volumes:
- /data/Mycat-mysql57-slave/conf:/etc/mysql
- /data/Mycat-mysql57-slave/logs:/var/log/mysql
- /data/Mycat-mysql57-slave/data:/var/lib/mysql
- /data/Mycat-mysql57-slave/conf/my.cnf:/etc/mysql/my.cnf
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
- MYSQL_ROOT_PASSWORD=root
restart: always
container_name: Mycat-mysql57-slave
privileged: true
networks:
Mycat-net:
ipv4_address: 172.101.0.11
networks:
Mycat-net:
external: true

查看容器

1
2
3
4
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a54d7ecc8b7 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up About a minute 33060/tcp, 0.0.0.0:13309->3306/tcp, :::13309->3306/tcp Mycat-mysql57-slave
da02d2ffff9b mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up About a minute 33060/tcp, 0.0.0.0:13308->3306/tcp, :::13308->3306/tcp Mycat-mysql57-master

连接到主服务器
查询主对应配置文件中的server_id,查询到了说明已经以上步骤ok。

1
2
3
4
5
6
show variables like '%server_id%';


Variable_name Value
server_id 66
server_id_bits 32

查询主状态信息

1
2
3
4
5
show master status;


File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000005 154

连接从服务器
同步主服务器配置

1
change master to master_host='172.101.0.10',master_user='root',master_password='root', master_log_file='mysql-bin.000005',master_log_pos=154;

开始同步

1
start slave;

检查从服务器复制功能状态

1
2
3
4
5
SHOW SLAVE STATUS;


Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_UUID Master_Info_File SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Master_Retry_Count Master_Bind Last_IO_Error_Timestamp Last_SQL_Error_Timestamp Master_SSL_Crl Master_SSL_Crlpath Retrieved_Gtid_Set Executed_Gtid_Set Auto_Position Replicate_Rewrite_DB Channel_Name Master_TLS_Version
Waiting for master to send event 172.101.0.10 root 3306 60 mysql-bin.000005 154 7a54d7ecc8b7-relay-bin.000014 367 mysql-bin.000005 Yes Yes 0 0 154 747 None 0 No 0 No 0 0 66 bd58294d-9a8c-11ec-9dfd-0242ac65000a /var/lib/mysql/master.info 0 Slave has read all relay log; waiting for more updates 86400 0

Slave_IO_Running 、Slave_SQL_Running 都为Yes说明配置成功,验证效果,在主节点,新建数据库,和表,从库自动生成。

注意:不要在从库操作,会造成同步不正常,主从配置失效;
解决办法,将从库同步配置停止,将主库数据重新导入从库,再次执行一次主从配置;

搭建Mycat环境

下载 mycat包

1
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

若出现 wget: unable to resolve host address ‘dl.mycat.io’

解决方案:
编辑/etc/hosts文件,添加 210.51.26.184 dl.mycat.io配置

1
2
vim /etc/hosts
210.51.26.184 dl.mycat.io
1
2
3
4
root@bigdata01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
210.51.26.184 dl.mycat.io

编写Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM java:8
USER root
COPY Mycat-server-1.6.5-release-20180122220033-linux.tar.gz /
RUN tar -zxf /Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
ENV MYCAT_HOME=/mycat
ENV PATH=$PATH:${MYCAT_HOME}/bin
WORKDIR $MYCAT_HOME/bin
RUN chmod u+x ./mycat
EXPOSE 8066 9066
CMD ["./mycat", "console"]

获取配置文件

1
2
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 
mv mycat/conf/ conf

1.2.4 修改mycat配置文件
真正需要修改的只有三个文件,具体官方文档写的很详细;
(1):schema.xml ,(2):server.xml,(3):rule.xml;
现在搭建的是Mysql读写分离,修改schema.xml、server.xm即可。rule.xml用于分表分库配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- TESTDB1 是mycat的逻辑库名称,链接需要用的 -->
<schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- database 是MySQL数据库的库名 -->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!--
dataNode节点中各属性说明:
name:指定逻辑数据节点名称;
dataHost:指定逻辑数据节点物理主机节点名称;
database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99, 表示指定0-99这100个数据库;

dataHost 节点中各属性说明:
name:物理主机节点名称;
maxCon:指定物理主机服务最大支持1000个连接;
minCon:指定物理主机服务最小保持10个连接;
writeType:指定写入类型;
0,只在writeHost节点写入;
1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个;
dbType:指定数据库类型;
dbDriver:指定数据库驱动;
balance:指定物理主机服务的负载模式。
0,不开启读写分离机制;
1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡;
2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡;
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- 可以配置多个主从 -->
<writeHost host="hostM1" url="192.168.0.171:3308" user="root" password="root">
<!-- 可以配置多个从库 -->
<readHost host="hostS2" url="192.168.0.171:3309" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">

<!-- 读写都可用的用户 -->
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mycat_testdb</property>

<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>

<!-- 只读用户 -->
<user name="user">
<property name="password">user</property>
<property name="schemas">mycat_testdb</property>
<property name="readOnly">true</property>
</user>

</mycat:server>

执行Dockerfile

1
docker build -t mycat:1.6.5 .

启动mycat

1
docker run -d --rm  -p:8066:8066 --name mycat-mysql -p 9066:9066 -v $PWD/logs:/mycat/logs -v $PWD/conf:/mycat/conf mycat:1.6.5

也可通过docker-compse启动yml

Mycat1.6.5.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#mkdir -p /data/Mycat/{conf,logs}
#docker-compose -f Mycat1.6.5.yml up -d
#Mycat1.6.5.yml 配置文件如下
version: "2"

services:
mycat:
image: mycat:1.6.5
ports:
- "8066:8066"
- "9066:9066"
volumes:
- /data/Mycat/logs:/mycat/logs
- /data/Mycat/conf:/mycat/conf
restart: always
container_name: mycat
privileged: true
networks:
Mycat-net:
ipv4_address: 172.101.0.9
networks:
Mycat-net:
external: true

验证效果

连接这四个服务

在root服务修改数据,其他三个服务的数据自动同步相应的修改。

在user服务修改数据报错,只允许读数据。

说明:
8066为mycat 操作myslq 的端口,可查询库,和增删改查等操作

9066为mycat 管理myslq 的端口,可查询操作日志,操作用户,和用时等

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

记录两个家里网线改造过程中出现的问题

发表于 2022-02-28
字数统计: 383 字 | 阅读时长 ≈ 1 min

问题一

1.部分网线为伪千兆网线,特别是运营商或者是路由器送的那些,在500Mb以下的时候,单独光猫到路由器,显示千兆,测速也不会出现问题,一旦在单线多拨情况下,速度超过500mb,网线就会无法识别,或者只识别为百兆….所以家里组千兆网,一定确定家里网线是否正常达标,才不会翻车。

问题二

2.制作网线的时候网线头到水晶头一定确定线头到水晶头的顶部,再去压线,若不然,会出现接触不好,轻则千兆网线变百兆,重则网线无法正常识别,今天个人制作网线的时候就出现了这种情况,七类网线加千兆屏蔽水晶头,做出的网线只识别为百兆,后用网线测试仪器测到网线中第七根线不通,才发现,是网线未插到水晶头底部就压线了,废了一个千兆屏蔽水晶头。尤其是在千兆级别的网线制作过程中,网线更粗,更硬,水晶头前端空间更小,不容易操作,压线前尤为注意。

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

Windows下如何查看某个端口被占用并杀死

发表于 2022-02-19
字数统计: 585 字 | 阅读时长 ≈ 2 min

开发时经常遇到端口被占用的情况,这个时候我们就需要找出被占用端口的程序,然后结束它。

操作步骤

1、打开命令窗口(以管理员身份运行)

开始—->运行—->cmd,或者是 window+R 组合键,调出命令窗口。

2、查找所有运行的端口

输入命令:

1
netstat -ano

该命令列出所有端口的使用情况。

在列表中我们观察被占用的端口,比如是 1224,首先找到它。

3、查看被占用端口对应的 PID

输入命令:

1
netstat -aon|findstr "1224"

回车执行该命令,最后一位数字就是 PID, 这里是 9088。

4、查看指定 PID 的进程

继续输入命令:

1
tasklist|findstr "9088"

回车执行该命令。

查看是哪个进程或者程序占用了 8081 端口,结果是:node.exe。

5、结束进程

强制(/F参数)杀死 pid 为 9088 的所有进程包括子进程(/T参数):

1
taskkill /T /F /PID 9088

或者是我们打开任务管理器,切换到进程选项卡,在PID一列查看9088对应的进程是谁:

之后就可以结束掉这个进程,这样就可以释放该端口来使用了。

将命令查询到的信息保存成txt文本

使用Windows中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果保存起来,但是用复制的方法过于麻烦;有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果输出到文本文件。如何将cmd中命令输出为TXT文本文件呢?
方法/步骤

在e:\(或其他目录)下创建文本文件cmd.txt(或其他名称)(这步可以省略,偶尔提示无法创建文件时需要)

在提示符下输入 

1
netstat -n >>  e:\cmd.txt

(注netstat -n为命令)

这时候发现E盘下面的cmd.txt里面已经记录了所有的信息

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

PacVim:一个学习vim命令的游戏

发表于 2022-02-18
字数统计: 783 字 | 阅读时长 ≈ 3 min

PacVim介绍

PacVim这款游戏其实是受PacMan(中文名:吃豆人)游戏启发而开发出来的。二者很相似,游戏任务都是躲避怪物,吃完豆豆。所不同的是,PacVim全程使用vim指令来操作,游戏的目的也是通过这种方式来提高Vim水平。

PacVim安装

安装Ncurses库
在centos7下安装如下:

1
yum install ncurses-devel

升级GCC版本
注意:linux下要请注意,编译PacVim需要gcc 8.x或更高版本,如果版本太低,可能无法正确编译和安装。

我用Centos 7 编译安装(gcc version 4.8.5 20150623 (Red Hat 4.8.5-16))。

以下是升级GCC版本步骤:

安装scl源

1
yum install centos-release-scl scl-utils-build

列出scl可用源

1
yum list all --enablerepo='centos-sclo-rh'
1
yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"

安装8版本的gcc、gcc-c++、gdb工具链(toolchian)

1
yum install -y devtoolset-8-toolchain
1
scl enable devtoolset-8 bash
1
gcc --version

安装PacVim游戏

这款游戏源码托管在GitHub上,只需下载后编译安装即可。

1
2
3
4
5
6
7
git clone https://github.com/jmoon018/PacVim.git

cd PacVim

sudo make

sudo make install

启动游戏

安装成功后,执行如下命令启动游戏

1
pacvim [LEVEL_NUMER] [MODE]

其中:

LEVEL_NUMER:表示关卡号

MODE:表示难度,n - 一般模式, h - 困难模式

游戏总共10关,0~9数字表示。例如,选择第5关一般模式,可以这样启动游戏:

pacvim 5 n

游戏规则

PacVim 的使用与 PacMan 非常相似。

你必须跑过屏幕上所有的字符,同时避免鬼魂(红色字符)。

PacVim有两个特殊的障碍:

你不能移动到墙壁中(黄色)。你必须使用 vim 动作来跳过它们。
如果你踩到波浪字符(青色的 ~),你就输了!
你有三条生命。每次打赢 0、3、6、9 关时你都会获得新生命。总共有 10 关,从 0 到 9,打赢第 9 关后,游戏重置为第 0 关,但是鬼魂速度变快。

获胜条件
使用 vim 命令将光标移动到字母上并高亮显示它们。所有字母都高亮显示后,你就会获胜并进入下一关。

失败条件
如果你碰到鬼魂(用红色 G 表示)或者波浪字符,你就会失去一条命。如果命小于 0 条,你将会输掉整个游戏。

命令列表:

key what it does
q quit the game
h move left
j move down
k move up
l move right
w move forward to next word beginning
W move forward to next WORD beginning
e move forward to next word ending
E move forward to next WORD ending
b move backward to next word beginning
B move backward to next WORD beginning
$ move to the end of the line
0 move to the beginning of the line
gg/1G move to the beginning of the first line
numberG move to the beginning of the line given by number
G move to the beginning of the last line
^ move to the first word at the current line
& 1337 cheatz (beat current level)

参考资料

更新升级GCC版本:

https://my.oschina.net/michaelshu/blog/3024970

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

错误解决:Handler Dispatch Failed; Nested Exception Is java.lang.NoClassDefFoundError:javax/xml/bind/**

发表于 2022-02-10
字数统计: 337 字 | 阅读时长 ≈ 2 min

错误详情

1
2
3
4
5
16:58:52.816 [http-nio-8080-exec-7] ERROR c.r.f.w.e.GlobalExceptionHandler - [handleException,83] - Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1053)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)

原因

是由于缺少jaxb-api包导致的。在Java 8以及以前的版本,是默认包含jaxb这个jar包的;但是在java SE 9.0就不再包含着个包了,如果使用则需要手动引进。

JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Jar 包。 java 9
中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包 而在 java 6/7/8 时关于这个API
都是捆绑在一起的

解决:

降低JDK版本到1.8

若项目是在idea中启动的
右击项目选择Open Module Settings

选Project setting -> project -> project sdk ->jdk 选择1.8

下面选择project language level 选择 8

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

Hexo快速、简洁且高效的博客框架

发表于 2022-01-26
字数统计: 960 字 | 阅读时长 ≈ 4 min

依赖

nodejs Node.js 12.0 及以上版本,14.0以下版本(推荐12.16.2)

安装

全局安装

1
npm install -g hexo-cli

在要创建站点的文件夹下执行

1
2
3
hexo init myblog
cd myblog
npm install

新建完成后,指定文件夹的目录如下:

1
2
3
4
5
6
7
8
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

_config.yml 网站的 配置 信息,您可以在此配置大部分的参数

scaffolds
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。

Hexo的模板是指在新建的文章文件中默认填充的内容。例如,如果您修改scaffold/post.md中的Front-matter内容,那么每次新建一篇文章时都会包含这个修改。

source
资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。

themes
主题 文件夹。Hexo 会根据主题来生成静态页面。

创建文章

1
hexo new 我的第一篇文章

默认在source/_posts文件夹中创建 我的第一篇文章.md
文章默认信息如下

1
2
3
4
5
6

---
title: 我的第一篇文章
date: 2022-01-25 21:07:45
tags:
---

然后编写自己的blog

运行

启动命令

1
hexo server

默认 http://localhost:4000 查看自己些的博客

启动命令也可简写

1
hexo s

打包

打包文件

1
hexo generate

打包之后生成的静态文件在public 文件夹

然后将public文件夹内的静态文件,放到自己网站的根目录就可以了

启动命令也可简写

1
hexo g

也可用dabug 方式监控生成情况

1
hexo g --debug

官网地址

更加详细的说明,请参考官网:

https://hexo.io

安装问题处理

关于hexo搭建博客——生成index.html页面为空

第一种:nodejs版本不兼容

主要原因是 nodejs版本不兼容,14+的版本都不行。
导致生成的index.html文件是空白的。
解决办法
重新安装nodejs 推荐12.16.2
安装完毕之后,
执行hexo g 会在本地Blog文件夹下,生成启动文件,打开里面的index.html如果有,内容说明问题解决了。

第一种:缺少相应包文件

问题情况: hexo g 命令后无相应静态文件index.html生成。
结局办法

hexo g 无法生成 index

但是一些文件没有生成,如 index.html 文件。

查看 npm 安装各 hexo 插件的情况
npm ls –depth 0
hexo 的一些插件未安装插件
npm ERR! missing npm ERR! missing hexo-generator-archive…

解决
逐一安装缺失的包

npm install hexo-generator-archive –save
…
安装完后重新构建即可解决。

第二种:缺失相应配置文件

问题情况:生成了index.html,但是此文件大小为0kb,博客首页文章预览正常显示,点开跳转为空白页面。
解决方案:git bush后运行hexo g –debug,即可在出现的结果中找到相应错误。例如会出现”can’t find xxxxxx”。即说明某个配置文件被引用,但你的文件里并没有这个文件,进行添加即可。

第三种:缺少.md文件

问题情况: hexo g 命令后无相应静态文件index.html生成。
解决方案:查找_post文件夹是否有相应的.md文件

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

Linux下zip压缩包解压中文乱码问题解决

发表于 2022-01-24
字数统计: 694 字 | 阅读时长 ≈ 3 min

问题

出现问题的操作过程:
将自己的Blog系统,由Jekyll 迁移到Hexo,原因是Hexo 运行打包简单,主题可选比较多

将自己的文章迁移之后,在windows系统下用hexo 进行打包,然后生成public 文件夹,使用360压缩,压缩成zip,粘贴到linux系统中的nginx的html文件夹下解压

使用

1
unzip public.zip

进行解压

解压后访问博客网站,发现很多文章不可以看,提示找不到文件

一开始以为是Jekyll和Hexo 的博客文件不兼容,但多次在window 下使用

1
2
3
4
5
6
7
8
Hexo server 
```
进行运行,发现文章没有什么问题

然后找打包问题,也没有找到。


无意间翻了一下nginx 的博客文件夹,发现,里面的所有的中文文章文件名都是乱码

[root@localhost 20170206]# ll
总用量 0
drwxr-xr-x. 2 root root 24 1月 23 23:29 2017-02-06-┐ь╦┘┤ю╜и╕Ў╚╦▓й┐═
drwxr-xr-x. 2 root root 24 1月 23 23:29 2021-06-25-▒г│╓╩╩╡▒╚▀╙р╨з┬╩▓в▓╗╩╟╘╜╕▀╘╜║├

1
2

而在window 文件夹下则是

D:\public\blog\20170206>dir
驱动器 D 中的卷是 WorkSpace
卷的序列号是 0E90-18B3

D:\public\blog\20170206 的目录

2022/01/23 23:29

.
2022/01/23 23:29 ..
2022/01/23 23:29 2017-02-06-快速搭建个人博客
2022/01/23 23:29 2021-06-25-保持适当冗余效率并不是越高越好
0 个文件 0 字节
4 个目录 37,327,597,568 可用字节

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

问题找到了,是在linux 下中文乱码了

排查linux 中文乱码问题,然后发现,linux系统已经安装了中文编码字符,没有乱码问题


然后怀疑是压缩问题,上网百度之后果然是压缩的问题,

原因是360压缩和unzip 压缩压缩解压用的编码字符不一致,都是以各自默认编码来解压压缩包


## 解决办法

统一编码字符集

方法1

使用360压缩,进行压缩文件

使用
```
unzip -O GBK xxx.zip

进行解压缩 ,若还是乱码尝试

1
unzip -O CP936 xxx.zip

或者

1
unzip -O GB18030 xxx.zip

方法2.

不使用 360压缩,下载7-Zip,选择zip压缩方式进行压缩,7-Zip的zip压缩使用的编码字符集和linux 下unzip 编码字符集是一致的

下载地址:

https://www.7-zip.org/download.html

一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

1…141516…38

继开

一辈子很短,努力的做好两件事就好:第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

303 日志
171 标签
RSS
gitee E-Mail
0%
鲁ICP备18007712号
© 2025 继开 | 站点字数统计: 262.2k
博客使用 Hexo 搭建
|
主题 — NexT.Mist v5.1.4
人访问 次查看