12月25
使用win10的朋友有没有遇到这样的情况,笔记本上连接过的wifi密码忘记了,现在没法连接又想找到以前记录的密码。如果你不知道或是正被这个问题困扰,可以参考下我的经验(●'◡'●)
注:现在可以连接上的wifi可以用本文方法查询,也可以参考下文

这种方法通过命令的方式查询所有连接过的WiFi,然后用命令查询具体要查询密码的WiFi。运行命令可以通过命令提示符窗口,也可以通过Windows PowerShell窗口,二者都是一样的。Windows PowerShell更为强大先进,所以用它来做操作说明。以下是具体操作:

A、右键单击开始菜单,点击Windows PowerShell
B、在【Windows PowerShell】窗口输入netsh,按下enter键
C、在netsh>后面输入wlan show profile或者wlan show profiles,按下enter键。在netsh语句里面profile和profiles是一样的。
D、我要CMCC-LJfh这个wifi的密码,那么输入命令wlan show profile CMCC-LJfh key=clear,敲下回车键。
命令提示符法比系统简单操作法稍微复杂一点,需要熟悉netsh命令。不熟悉也没关系,照上述说明操作即可。


也可以按下如下方式操作:
打开命令提示符(管理员)界面,输入命令 netsh wlan show profile
点击回车执行,显示以前连接并记录过的所有wifi配置
选择想要查询的wifi,输入命令 netsh wlan export profile name="所选wifi名称" folder=. key=clear
点击回车执行,配置信息自动保存到“系统安装盘的 windows/system32文件夹”下
注:不要修改命令中的folder参数,若是改到其他位置可能导致输出文件中的密码为加密后的而不是明文的
打开文件资源管理器(此电脑),进入C:\windows\system32文件夹,并定位到文件 WLAN-所选wifi名称.xml
右键选择打开方式用文本文件或浏览器打开,找到以下位置即为所选wifi的密码
12月17
一、执行程序切换后台
执行java -jar xxx.jar & 或者nohup java -jar xxxx.jar &。nohup不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系。
ctrl+z退出到控制台,执行 bg
执行exit
完成以上3步,退出SHELL后,jar服务一直在后台运行。

nohup java -jar XXX.jar >log.out &;
nohup是保证ssh连接关闭后,jar任然运行的关键,& 相当于后台运行,你后面还可以输入命令, >log.out  是输出日志的地方
ps aux|grep XXX.jar 查看某jar包的运行的进程号

二、结束进程
通过执行ps auxwww | grep XXX.jar通过查找进程关键字 找到进程PID。
执行kill -9 {PID} 杀死进程PID数字结束进程。
12月9
有个同事说使用Minio时发现返回的url访问直接访问不到,需要登录并且有有效期生成的文件地址,下面主要讲下在Minio中通过程序上传后的文件,返回的地址无法对外访问的问题。

MinioClient minioClient = new MinioClient(minio_url, minio_name, minio_pass);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String ymd = sdf.format(new Date());
        String objectName = ymd + "/" + UUID.randomUUID().toString() + (suffix != null ? suffix : "");
        minioClient.putObject(bucketName, objectName, inputStream, contentType);
        String url = minioClient.getObjectUrl(bucketName, objectName);
这里程序得到的地址,如果你想在浏览器直接访问是不行的。如果想要访问,需要对Minio进行一些设置。

Minio的称之为policy 即桶策略。如果想要直接访问图片,需要设置Bucket的访问策略。

官方文档 https://docs.minio.io/cn/minio-client-complete-guide.html#mb

下面介绍两种方法来实现永久访问,两种方法效果是一样的。

一、通过管理界面实现

登录后台管理界面,在右下角有个红色的加号图标,点击它,然后会看到下面的效果

点击create bucket ,输入要创建的bucket,如test

回车就可创建成功。

创建成功之后对bucket进行编辑。在页面的右上角。找到刚刚创建的test bucket。

点击那三个点,选择Edit policy ,会弹出下面的弹窗。

点击在新窗口中浏览此图片
在Prefix中输入* ,即允许所有访问。右边的选项选择 Read and write。
点击在新窗口中浏览此图片

然后点击Add 按钮就可以了。

-----------------------------------------------------------------------------------------------------------------------------------------

二、通过Minio提供的客户端来实现

Minio单独提供了一个客户端来设置Minio的服务端。

1、下载客户端程序

下载地址 https://dl.minio.io/client/mc/release/windows-amd64/mc.exe

2、启动一个cmd窗口,进入mc.exe的目录

输入 .\mc.exe --h 可以查看mc.exe的命令帮助。

3、设置服务端

使用 minio client 将自己的 minio server 添加到 mc 的配置管理,命令如下

.\mc.exe config host add minio http://192.168.50.179:9000 3K2287Q20OW3HWQ2FJXJ L0eTMaBzVQwUgbeuo05f+qmSA
buZiWt4yZfDzrMv
Added `minio` successfully.
此命令将 http://192.168.50.179:9000 取一个别名 minio ,并交给mc进行配置管理。

4、查看minio中的桶,命令

.\mc.exe ls minio
[2021-12-08 20:34:25 CST]     0 B asiatrip\
[2021-12-08 21:15:55 CST]     0 B tonnyyy\
[2021-12-08 20:54:28 CST]     0 B xzspfj\
5、设置桶的访问策略,命令

.\mc.exe policy public minio/xzspfj/20211208/
Access permission for `minio/xzspfj/20211208/` is set to `public`
通过以上步骤,图片就可以直接通过地址进行访问了。
12月7
平时我们经常查看容器的日志,命令如下:

docker logs -f 容器名或者容器id

随着时间的推移,日志文件越来越大,那么我们该如何清理日志文件呢?下面来讲解清理的步骤:

1.进入docker容器目录:

cd /var/lib/docker/containers/


2.查看容器的id,获取容器id,容器id就是容器目录名字

docker ps -a


3.进入容器,删除以log结尾的文件就是日志文件了,删除即可:

rm -rf 容器id.log


4.重启容器

docker restart 容器名或者容器id

打完收工!
12月7
在Java后面添加如下参数即可
9520为远程调试端口
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9520 -jar ./leo-barcode.jar
12月7
一、前言
MySQL 支持由 RFC 7159 定义的原生JSON 数据类型,该数据类型可以有效访问 JSON(JavaScript Object Notation)中的元素数据。与将JSON 格式的字符串存储为单个字符串类型相比,JSON 数据类型具有以下优势:

自动验证存储在JSON列中的JSON数据格式。无效格式会报错。
优化的存储格式。存储在JSON列中的JSON文档被转换为允许快速读取访问文档元素的内部格式。内部是以二进制格式存储JSON数据。
对JSON文档元素的快速读取访问。当服务器读取JSON文档时,不需要重新解析文本获取该值。通过key或数组索引直接查找子对象或嵌套值,而不需要读取整个JSON文档。
存储JSON文档所需的空间,大致与LONGBLOB或LONGTEXT相同
存储在JSON列中的任何JSON文档的大小都仅限于设置的系统变量max_allowed_packet的值
MySQL 8.0.13之前,JSON列不能有非null的默认值。
在 MySQL 8.0 中,优化器可以对 JSON 列执行部分就地更新,而不是删除旧JSON串并将新串完整地写入列。
MYSQL 8.0,除了提供JSON 数据类型,还有一组 SQL 函数可用于操作 JSON 的值,例如创建JSON对象、增删改查JSON数据中的某个元素。

二、常用JSON函数
首先,创建表列时候,列要设置为JSON类型:

1
CREATE TABLE t1 (content JSON);
插入数据,可以像插入varchar类型的数据一样,把json串添加单引号进行插入:

1
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
当然mysql也提供了创建JSON对象的函数:

1
INSERT INTO t1 VALUES(JSON_OBJECT("key1","value1","key2","value2"));
使用JSON_EXTRACT函数查询JSON类型数据中某个元素的值:


mysql> SELECT  JSON_EXTRACT(content,"$.key1") from t1;

+--------------------------------+
| JSON_EXTRACT(content,"$.key1") |
+--------------------------------+
| "value1"                       |
| "value1"                       |
+--------------------------------+
2 rows in set (0.00 sec)
lamba表达式风格查询:


mysql> SELECT content->"$.key1" from t1;
+-------------------+
| content->"$.key1" |
+-------------------+
| "value1"          |
| "value1"          |
+-------------------+
2 rows in set (0.00 sec)
使用JSON_SET函数更新JSON中某个元素的值,如果不存在则添加:


mysql> update t1 set content=JSON_SET(content,"$.key1",'value111');
Query OK, 2 rows affected (0.00 sec)

Rows matched: 2  Changed: 2  Warnings: 0
更多JSON类型数据操作函数,可以参考:https://dev.mysql.com/doc/refman/8.0/en/json.html

三、MyBatis中使用JSON类型及其操作函数
比如Device表里面有个JSON类型的content字段,其中含有名称为name的元素,我们来修改和查询name元素对应的值。

ExtMapper中定义修改和查询接口:

@Mapper
public interface DeviceDOExtMapper extends com.zlx.user.dal.mapper.DeviceDOMapper {
    //更新JSON串中名称为name的key的值
    int updateName(@Param("name") String name, @Param("query") DeviceQuery query);
    //查询JSON串中名称为name的key的值
    String selectName(DeviceQuery query);
}
ExtMapper.xml中定义查询sql:

<mapper namespace="com.zlx.user.dal.mapper.ext.DeviceDOExtMapper">
    <!--更新JSON串中名称为name的key的值-->
    <update id="updateName" parameterType="map">
        update device
        <set>
            <if test="name != null">
                content = JSON_SET(content, '$.name', #{name,jdbcType=VARCHAR})
            </if>
        </set>
        <if test="_parameter != null">
            <include refid="Update_By_Example_Where_Clause"/>
        </if>
    </update>

    <!--查询JSON串中名称为name的key的值-->
    <select id="selectName" parameterType="com.zlx.user.dal.model.DeviceQuery" resultType="java.lang.String">
        select
        `content`->'$.name'
        from device
        <if test="_parameter != null">
            <include refid="Example_Where_Clause"/>
        </if>
    </select>
</mapper>
总结
虽然我们实践上不建议把所有扩展字段都放到一个大字段里面。但是即使有原因一定到放,那么也建议选择JSON类型,而不是varcahr和Text类型。


参考:
https://dev.mysql.com/doc/refman/8.0/en/json.html
12月6
var userAgent=navigator.userAgent
if(userAgent.index0f("OPR")> -1){
//0pera浏览器,因为Opera浏览器的userAgent也有Chrome和Safari,所以要写在前面 alert("Opera");
}else if(userAgent.index0f("Version")>-1&&userAgent.index0f("Safari")> -1){
//没有更好的办法判断Safari浏览器,只能通过version(版本号)的英又来断,因为别的游览器版本号不是这样写的 alert("Safari"):
}else if(userAgent.index0f("Chrome")> -1){
//谷歌浏览器也有可能是使朋Chrome内核的其他谢览器 alert("Chrome");
}else if(userAgent.index0f("Firefox")>-1){
//火狐浏览器
alert("Firefox");
}else if(userAgent.index0f("compatible")>-1 &&userAgent.index0f("MSIE 10.0")> -1){
//IE 10.0
alert("IE 10.0");
}else if(userAgent.index0f("compatible")>-1&& userAgent.index0f("MSIE 9.0")> -1){
//IE 9.0
alert("IE 9.0");
}else if(userAgent.index0f("compatible")>-1 &&userAgent.index0f("MSIE 8.0")> -1){
//IE 8.0
alert("IE 8.0");
helse if(userAgent.index0f("compatible")>-1&& userAgent.index0f("MSIE 7.0")> -1){
//IE 7.0
alert("IE 7.0");

各浏览器的navigator.userAgent

浏览器  navigator.userAgent
谷歌  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
火狐  Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Opera  Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635
Safari  Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
IE11.0  Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko
IE10.0  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
IE9.0  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
IE8.0  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
IE7.0  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
Windows NT 区别系统版本

系统版本  Windows NT
win 10  Windows NT 10.0
win 8  Windows NT 6.2
win 7  Windows NT 6.1
vista  Windows NT 6.0
win xp  Windows NT 5.1
win 2000  Windows NT 5.0

12月6
报错信息:
java.io.IOException: No space left on deviceat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:282)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)

服务器磁盘不足,df -h 一下,发现tmpfs挂载的tmp文件夹只有2M剩下的只有几K了,在想应该是这个问题,于是将tmp目录调大一点,下面调到2g,输入以下命令:
mount -t tmpfs  -o size=2g   tmpfs /tmp

重新上传文件,发现成功上传,问题解决。
12月1
目录结构: tomcat/logs目录.

1.实时查看当前项目的运行日志,进入logs目录,
tail -f catalina.out

扩展: ( 退出 )

ctrl + c



2.查询某个时间段的日志?
首先, 日志中要有程序记录的时间,然后在logs目录下执行此命令: ( 把这段时间的日志输出到新的文件中。 )

sed -n '/2021-12-01 11:30:/,/2021-12-01 11:40:/p' catalina.out > new.out

解析: ( 命令详解 )

sed -n '/年份-月份-日期 小时:分钟:/,/年份-月份-日期 小时:分钟:/p' catalina.out > 新的的文件名称.out


注意:
       若catalina.out文件比较大, 可以就会比较慢, 等待一会就可以了!


3.扩展一个<清空>日志文件的命令? ( 你可能会用到 )
echo ' ' > catalina.out

why?
       若日志文件过大, 可能会导致服务器磁盘空间满了, 有些接口可能不能正常访问. ( 此时就需要解决! )
       通过这种方法,磁盘空间可以立即释放,进程可以继续向文件写入日志,但不必重启服务器。
12月1
对于weboffice这个active插件的使用上提供点说明。

  首先在官网上下载weboffice7

     下载weboffice7-exe.rarweboffice7-x86.rar。解压后有个weboffice.exe和weboffice.cab

  1、要使用这个插件,首先你得先在电脑安装weboffice.exe

  由于这是activex插件,只支持ie,所以chrome,firefox是不支持的。所以有个ffactivex-setup-r39.rar可以提供兼容,这个需要先安装,再安装weboffice.exe 。weboffice.exe和ffactivex-setup-r39这两个安装包在你自己的web系统上可以写个js判断是否已经安装,是否ie,没有的话提供下载。

  2、安装后,在你页面上的某个固定的div内嵌入个<object> 对象,这个<object>就是offcie对象。。可以看官网上的weboffice7-demo.rar。里面有个LoadWebOffice.js。我把内容拷出来,如下面。


var s = ""
s += "<object id=WebOffice1 height=768 width='100%' style='LEFT: 0px; TOP: 0px'  classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase='WebOffice.cab#Version=7,0,1,0'>"
s +="<param name='_ExtentX' value='6350'><param name='_ExtentY' value='6350'>"
s +="</OBJECT>"
document.write(s)
就是返回一个object对象,其中之前下载weboffice.cab需要把地址写在codebase内。这个object对象的id是weboffice1,var obj=document.getElementById("WebOffice1") ;用obj就可以调用对这个offcie的各种操作了。具体api可以看官网提供的最后一个weboffice7-SDK.rar 。 如下面例子中就是在td内引入<object>。

<TD class=TableData vAlign=top width="85%">
        <!-- -----------------------------== 装载weboffice控件 ==--------------------------------- -->
      <SCRIPT src="LoadWebOffice.js"></SCRIPT>
            <!-- --------------------------------== 结束装载控件 ==----------------------------------- -->
            </TD>
  3、假如需要兼容chrome和firefox。。在不同的浏览器下,这个<object>对象有不同的写法,具体可以参考论坛代码链接

  这个插件可以实现web在线offcie编辑,保存,修订,套红,印章等功能。勉强能用吧。。兼容的插件ffactivex-setup-r39其实是firefox的activex兼容,用在chrome需要在npi上启用,而且兼容效果比在firefox下差。

分页: 2/58 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]