头像

java实现替换json字符串参数值

以下是代码:

String str="{\"code\":\"na7ne\",\"identity\":1671760031645,\"password\":\"88888888\",\"username\":\"fuj\"}";
JSONObject jsonObject = JSON.parseObject(str);
System.out.println(str);
for(Map.Entry<String,Object> map: jsonObject.entrySet()){
    if(map.getKey().contains("password"))
        JSONPath.set(jsonObject,"$."+map.getKey(),"***");
}
System.out.println(jsonObject.toJSONString());

以下是输出内容:

{"code":"na7ne","identity":1671760031645,"password":"88888888","username":"fuj"}
{"password":"***","code":"na7ne","identity":1671760031645,"username":"fuj"}
头像

MYBATIS-PLUS 多数据源-读写分离

前言

最近翻了下mybatis-plus官方文档,发现多数据源这一块,提供了读写分离的功能。之前系统使用的sharding sphere插件实现读写分离(没有使用分库分表,业务上不去),总结有以下缺陷:
1、单纯使用读写分离,也受到SQL不支持项的约束
2、项目启动时,加载meta数据时间比较长(200+的表,本地开发加载12000+ms,测试环境4000+ms)
3、打印的sql执行日志,换行比较多,也不像mybatis打印的SQL那么容易还原(或者直接通过插件还原)
既然mybatis-plus提供了读写分离功能,系统中本来也集成了mybatis-plus,于是决定改用mybatis-plus提供读写分离。

PS:自己也找过很多方式尝试,失败了!!!

过程

官网地址

mbatis-plus
mybatis-plus 多数据源

过程

按照官网指引

引入DYNAMIC-DATASOURCE-SPRING-BOOT-STARTER

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

配置数据源,使用HIKARI连接池

spring:
  datasource:    
    dynamic:
      p6spy: false
      hikari:
        connection-test-query: SELECT 1
        minimum-idle: 60
        idle-timeout: 30000
        maximum-pool-size: 500
        auto-commit: true
        max-lifetime: 120000
        connection-timeout: 30000
      primary: master
      strict: false
      datasource:
        master:
          url: jdbc:mysql://xxx:3306/xxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
          username: xxx
          password: xxxx
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.zaxxer.hikari.HikariDataSource
          hikari:
            pool-name: masterHikariPool
        slave_1:
          url: jdbc:mysql://xxxx:3308/xxxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
          username: xxx
          password: xxxx
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.zaxxer.hikari.HikariDataSource
          hikari:
            pool-name: slave1HikariPool

注意,在官网的示例里,默认是使用druid连接池,要修改为hikari,必须指定type:com.zaxxer.hikari.HikariDataSource,不然都是使用druid,而且该starter使用的druid版本,还是会有localDateTime转换出错的问题

使用读写分离模式

    @Bean
    public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin(){
        return new MasterSlaveAutoRoutingPlugin();
    }

开启日志打印

logging:
  level:
  	com.baomidou.dynamic: debug

注意,这个是全局配置,可以不用@DS注解在每个类上,当然也可以注解,注解了@DS,则按照@DS注解进行

 

网址来源:https://www.freesion.com/article/65781031315/

头像

win10修改ip,出现了一个意外的情况。不能完成所有你在设置中所要求的更改。

今天在调试硬件设计,需要修改网段信息。在修改的时候弹出以下窗口,提示修改失败。

微信截图_20220531175114

 

可以通过cmd 方式修改,执行 netsh interface ip set address “以太网” static 192.168.1.194 255.255.255.0

如果要修改为自动获取ip,执行:netsh interface ip set address “以太网” source=dhcp

头像

[postgresql] – 重复数据删除,仅保留其中一条

1.常规删除方法
explain analyse delete from deltest a where a.ctid <> (select min(t.ctid) from deltest t where a.id=t.id);
2.group by删除方法
explain analyse delete from deltest a where a.ctid not in (select min(ctid) from deltest group by id);
3.row_number删除方法
explain analyze delete from deltest a where a.ctid = any(array (select ctid from (select row_number() over (partition by id), ctid from deltest) t where t.row_number > 1));

根据某个字段分组删除重复数据,只保留日期最大的一条,建议使用窗口函数效率更高

头像

.Net 中Json序列化实体时忽略部分属性

接口对接中,返回的实体想要部分字段不被序列化返回。以前的做法是新建一个类做深拷贝,后来发现这方法不是很友好。

找了个不错的方法如下:

using Newtonsoft.Json;
namespace Actuator.Contacts
{
[JsonObject(MemberSerialization.OptIn)]
class ZJ
{
[JsonProperty]
public string seqid; //Varchar(50) 每条记录的时间戳标识,精确到毫秒
[JsonProperty]
public string code; //Varchar(200)设备号(终端 SN 号)
[JsonProperty]
public string pileCode;// Varchar(50) 桩编号由施工现场定义,一般为桩号

[JsonProperty]
public int isResultData = 1; // Int 是否为施工结果数据 1是,0否

[JsonIgnoreAttribute]
public int KeyId { get; set; }

}
}

附带解释
JsonObjectAttribute
这个标签的成员序列化标志指定成员序列化是opt-in(要序列化的成员必须带有JsonProperty或DataMember标签)还是opt-out(默认所有的都会序列化,但通过JsonIgnoreAttribute标签可以忽略序列化。opt-out是json.net默认的)。

JsonPropertyAttribute
允许被序列化的成员自定义名字。这个标签同时标示出:在成员序列化设置为opt-in的时候,成员会被序列化。

JsonIgnoreAttribute
忽略域或属性的序列化

JsonConverterAttribute
用于指派转换对象的JsonSerializer。
这个标签可以修饰类或类成员。用于修饰类时,通过此标签指派的JsonConverter会被设置为序列化类的默认方式。用于修饰属性或域成员时,被指派的JsonConverter会序列化它们的值

[XmlIgnore]
忽略xml 序列化

头像

Postgres数据库忘记密码,只需三个步骤重置

Postgres数据库忘记密码,三个步骤解决
一、修改data目录下的 pg_hba.conf 文件
将以下这行
host    all            all           127.0.0.1/32          md5
改为如下:
host    all            all           127.0.0.1/32          trust
如果开启ipv6的话,以下也要修改
# IPv6 local connections:
host all all ::1/128 trust
二、运行cmd,进入postgres安装路径的bin目录,运行如下命令:
psql -U postgres
postgres=# alter user postgres with password ‘你要设置的密码';
postgres=# \q 
三、修改data目录下的 pg_hba.conf 文件
将以下这行

host  all   all  127.0.0.1/32  trust
改为如下:
host  all   all  127.0.0.1/32  md5
ipv6的密码方式也修改
重新启动postgres
头像

Windows server 2012 没有远程桌面授权服务器可以提供许可证

server 2012 或server 2008等默认的最大远程登录链接为2个,超过这个数目需要使用licenseserver进行授权,这个授权据说是收费的,但官方给予了120天的Grace period来配置license server。如果超过120天后仍然没有可用的license server,就会出现第一种错误。而这个Grace period信息记录在上文的注册表中,因此只要删除注册表中的项(需要修改此注册表项权限所有者为Administrators,给Administrators增加修改权限),重启服务器就可以了。还有人提到可以修改系统时间为将来,然后删除注册表,再把系统时间改回来,这样可以获得更长的Grace period。

本人已解决,参考下文。
原文链接:https://blog.csdn.net/zhangzhen1992/article/details/80838302