0%

前言

最近有个需求,就是一个专网的客户端对应一个账号,不能同时登录,否则另一个会被登出,一个办法就是找管理员开多个账号,第二就是找局域网内一台电脑登录,然后将其共享给局域网内的其他用户,下面简单记录下

教程

环境介绍

  • 专网地址: 10.0.1.*
  • 局域网安装客户端的电脑:192.168.1.11
  • 我的局域网IP:192.168.1.123

第一步,首先链接上专网客户端后,会多出来一个网卡,如下,需要把这个网卡共享给本地局域网的网卡,设置如图

确定后会弹框提示是否设置为一个固定IP,然后本地局域网卡会被设置为192.168.137.1的IP,且没有网关,需要手动设置一个局域网内的固定IP,否则无法和局域网通信,到此共享设置完成

第二步,开启IP路由转发,由于用的windows,需要设置注册表,如果是linux,则比较简单,这里不作介绍,有需要自行请自行google,win + r 输入regedit,打开注册表,找到如下位置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,该目录下有个IPEnableRouter 配置,默认是0,就是关闭转发,将其修改为1,如图

第三步,打开服务,并且找到 Routing and Remote Access 这个服务,这个就是路由转发的服务,默认是禁用且关闭的,右键属性,改为自动,并启动,到此,路由转发配置完成,如图

第四步,然后在我的电脑上(192.168.1.123)上手动添加一条路由,命令如下

1
2
3
4
5
6
7
route add 10.0.1.0 mask 255.255.255.0 192.168.1.11

# 简单说一下,10.0.1.0是目的地,比如你要访问10.0.1.23,则可以设置为10.0.1.0,也可以设置为10.0.1.23,只不过设置成后者,你就只能访问1.23,别的IP就不能访问,我这里设置成前者,

#mask是子网掩码,这里的255.255.255.0和签名的10.0.1.0是搭配的,这样设置后,你可以访问1.0 ~ 1.254网段内所有IP,如果你前面的设置成固定IP比如10.0.1.23,则后面的mask就需要设置成255.255.255.255,表示只有一个IP,这个掩码比较复杂,不展开描述,如果需要可自行了解

# 再后面的 192.168.1.11 就是下一跳,也称之为网关,因为你再11上开的专网客户端

这个命令连起来的意思就是,如果我想访问10.0.1.12的IP,则系统先去本机路由查找这个地址对应的路由,找到10.0.1.0/24的路由,并且它对应的下一跳是192.168.1.11,则数据就会被发送到11上,11再根据本地路由去找对应的规则,继续转发,最后转发到专网上,接下来我们可以ping一下专网里的服务器,ping通,表示配置正常

结语

不过这样添加路由需要每台访问的主机都需要手动添加一个,比较麻烦,那么最简单的就是再你的网关上添加一条静态路由,还是以上配置,网关一般是路由器,当然也有可能是专门的网关,这里需要咨询自己网络的管理员!再网关上配置了之后,就可以再局域网内任何一台电脑上访问专网数据了,因为本地路由如果无法匹配,就会将数据转发给网关,网关再根据自己的路由规则进行查找,如果找到,则继续,找不到则丢弃

前言

我提交代码到git上,基本都是idea中用gui操作,简单方便,这次我是现在gitee中先创建好了远程仓库,然后才提交代码,倒是不会用了,所以改用命令操作,下面记录一下过程

过程
  1. 首先再项目根目录下执行下git init初始化项目

    1
    git init
  2. 然后执行add 命令将代码提交到暂存区,表示将所有文件加入到git 版本控制,如有需要,请提前建立好.gitignore文件,将需要忽略的文件加入其中

    阅读全文 »

前言

eclipse已经过时,用起来不管是界面还是配置都极其不方便,所以本文介绍下如何将eclipse项目转为IDEA项目

教程

本教程是图文教程,请参照图操作,文中我使用的idea是2022.2版本,不同的idea版本界面上可能稍有不同,但功能都一样,没有什么影响,按照教程操作即可

阅读全文 »

前言

最近有个需求,就是需要把app的下载连接挂出来,有一台外网服务器,里面只有nginx 443可以做前置转发,没有也不能开放别的端口,思考后nginx是不是可以指定下载下载目录呢,查看后发现是可以的

实现

nginx作为web服务器,实现文件下载

1
2
3
4
5
6
7
8
9
10
11
12
13
http{
server{
location ^~ /downloadFile/ {
#需要下载的文件存放的目录
alias /home/downloadFile/;
sendfile on;
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
}
}
}

再nginx对应的配置文件里配置好后,重置下nginx就可以了

前言

最近项目上刚装了一个数据库,默认最大连接数应该是100,项目模块较多,增删改查较多,项目启动后发现不一会就报错了,查看后是超过最大连接数,数据库挂了,记录一下修改方法

修改

首先查看一下当前最大连接数

1
show variables like '%max_connections%';

两种方式修改

  • 命令修改,但是重启失效,命令如下,登录mysql后

    1
    set global max_connections=200
  • my.ini配置文件修改,永久生效,在my.ini里添加或修改这行

    1
    max_connections=1000

建议使用配置文件修改

前言

最近项目中遇到一个问题,有点工作流的模块,它有自己的表,启动后会检查数据库中是否有它自己的表,没有的话会自动创建,启动该模块后,发现创建了一堆全部大写命名的表,而且小写命名的表是存在的,第一时间想到的区分大小写问题,因为之前用的windows上的mysql没问题,这次用的是centos上mysql,所以linux上装的mysql默认是区分大小写的

修改

首先登录mysql,控制台或者navicat都可以,执行下面命令查看当前是否区分大小写

1
show variables like '%case%';

lower_case_table_name值:0:区分大小 1:不区分大小写,它是只读变量,mysql启动之后无法直接更改,只能去my.conf中修改,首先找到mysq.ini,找到**[mysqld]**部分添加配置,不要写错位置,否则轻则修改无效,重则mysql无法启动。

my.cnf一般在/etc/mysql/my.cnf中,修改后如下

1
2
3
4
5
6
#Ubuntu下配置文件是/etc/mysql/mysql.conf.d/mysqld.cnf
#CentOS下配置文件是/etc/my.cnf
#在[mysqld]下添加配置

[mysqld]
lower_case_table_names=1

改完后重启mysql

1
2
3
4
5
6
7
8
#ubuntu
systemctl restart mysql.service

#centos
systemctl restart mysqld

#docker
docker restart mysql
总结
  • 在linux中数据库名与表名默认是严格区分大小写的;
  • 在linux中表的别名是严格区分大小写的;
  • 在linux中列名与列的别名在所有的情况下均是忽略大小写的;
  • 在linux中变量名也是严格区分大小写的;
  • 在Windows下都不区分大小写。
注意:

经过测试,docker命令直接创建的话需要在命令中最后添加该参数配置,否则一经启动,无法更改,创建并运行命令如下

1
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123445 mysql:latest --lower-case-table-names=1

前言

最近同事遇到了一个问题,就是mybatis中使用useGeneratedKeys无法返回主键,确认keyProperty 设置的主键没有问题,代码也没有问题,后来经过查找,原来时mapper.java中的注解Param的问题

错误代码示例

正确示例

总结

使用useGeneratedKeys生成主键时

  (1)如果在DAO层使用@Param注解传递参数,则 keyProperty 属性 需要通过 “注解”+“主键id” 的格式,否则无法返回主键,例如 msg.MsgInnerId

  (2)如果在DAO层只有单个参数传递(不需要使用@Param注解穿传递参数),则 keyProperty 属性可以直接 用 “主键id” 来返回

前言

最近在idea里运行项目时遇到的一个问题,无法run,报错如下Command line is too long. Shorten command line for ServiceStarter or also for Application,以下方法可以解决

解决

点击项目启动配置项 –> Enviroment –> Shorten command line 选项 –> 选择 classpath file 或JAR manifest 选项 –> 重新启动工程运行即可

前言

最近在docker里装的mysql,入库时发现时间都不对,不是utc+8,但是宿主机系统是正常的时间,所以研究了下怎么更改docker容器里的时间,其实很简单

方法
1
2
3
4
5
6
# 方法1:直接在宿主机操作
docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器ID或者NAME】:/etc/localtime

# 方法2:登录容器同步时区timezone
ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime

方法2试过没问题,方法1没试过,应该也没问题

注意

操作后记得重启下docker或者容器,否则有可能不会变过来

前言

最近在项目上需要引用到mq消息队列,尤其是支持延时消息的队列,首先延迟消息的方法有很多,比如redis的键过期监听是我用过的,用户量小,所以到时美出现过什么问题,但是这个方法是不推荐的,因为redis也说明了这个不是稳定的,一定会推送的,而且这种方法不稳定,比如网络问题正好丢失了等等,所以研究了一下支持延时消息的消息队列,因为项目中也需要用到消息队列,所以对比了下几大mq中间件,最终选择了apache pulsar,简单,支持秒级别(分钟、小时、天)的延时消息,测试了一下效率都挺不多,毕竟大厂都在用,记录一下使用过程

介绍

Pulsar是一个用于服务端到服务端的消息中间件,具有多租户、高性能等优势。Pulsar最初由Yahoo开发,目前由Apache软件基金会管理。Pulsar采用发布-订阅的设计模式,Producer发布消息到Topic,Consumer订阅Topic、处理Topic中的消息。

阅读全文 »