Browsed by
作者: adaivskenan

达梦等国产数据库错误码适配Spring

达梦等国产数据库错误码适配Spring

背景

项目某需求需要通过程序定时将数据从A系统同步至B、C等系统。数据同步过程中常见的一种错误是是唯一索引冲突(主键或者其它唯一索引),开发中一般直接使用org.springframework.dao.DuplicateKeyException判断冲突是否为唯一索引,如果是则忽略该条数据,但是使用国产达梦数据库后该判断方式失效了,默认返回了dm.jdbc.driver.DMExceptio

整体伪代码

String sql="insert into TABLE(EMPLOYEEID, EMPLOYEENAME, IDENTITYCARD) values(?,?,?)";List params = new ArrayList();try {for(int i=0;i<1000;i++){Object param[]={"001", "adaivskenan", "140000202201018888"};params.add(param);}jdbcTemplate.batchUpdate(sql,params);} catch (Exception e) {//判断批量异常,退化为单条处理if(NestedExceptionUtils.getRootCause(e).equals(BatchUpdateException.class)){for(int i=0;i<1000;i++){Object param[]={"001", "adaivskenan", "140000202201018888"};params.add(param);try{jdbcTemplate.update(sql,params);}catch(DuplicateKeyException e){//忽略唯一索引错误}}}

解决办法

在资源目录下放置sql-error-codes.xml文件,增加数据库错误码映射在这里插入图片描述在这里插入图片描述

分析过程

1. DuplicateKeyException产生过程

Spring JDBC模块发生数据库异常时会执

阅读全文 Read More

Java进程的dump文件生成与分析

Java进程的dump文件生成与分析

JavaDum

  Java虚拟机的运行时快照。将Java虚拟机运行时的状态和信息保存到文件

线程Dum

  包含所有线程的

堆Dum

  包含线程Dump,并包含所有堆对

制作JavaDum

JVM参数

-XX:+HeapDumpOnOutOfMemoryError

  指示虚拟机在发生内存不足错误

命令行制作

  在JDK的bin目录下,包含了ja

  • jps:查看本机的Java进程信息

  使用jps查看Java进程ID(PID);Linux下还可以使用ps命令

jpsjps -ljps -vps -ef|grep java
  • jstack:打印线程的栈信息,制作线程Dump。
jstack <进程ID> >> <输出文件>jstack 2316 >> c:\thread.txt## Linux下使用Kill命令制作线程Dump,输出线程Dump到目标Java进程的标准输出kill -quit <进程ID>kill -3 <进程ID>
  • jmap:打印内存映射,制作堆Dum

  使用jm

jmap -dump:format=b,file=<输出文件> <进程ID>
  • jconsole:简易的可视化控制台

阅读全文 Read More

Nginx性能优化必备参数与说明

Nginx性能优化必备参数与说明

优化方向

  • CPU 亲和配置
  • 网络模型优化配置
  • 连接数优化配置
  • TCP连接优化配置
  • 日志优化配置
  • gzip压缩配置
# nginx运行时使用www用户,默认是nginxuser www;# 针对cpu核树自动配置。nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpuworker_processes  auto;# nginx cpu自动亲和配置worker_cpu_affinity auto;# nginx错误日志的目录和级别设置  debug, info, notice, warn, error, crit  默认为 criterror_log /var/log/nginx/error.log warn;pid /run/nginx.pid;# 能打开的最多文件描述符,可与ulimit -n 保持一致,负荷较高建议2-3w以上worker_rlimit_nofile 35535;# 个性化模块配置include /usr/share/nginx/modules/*.conf;events {# 网络io模型,nginx采用epoll事件模型,处理效率高use epoll;# 限制每个进程可以处理多少个连接请求,最大(worker_rlimit_nofile/worker_processes) 整体可打开文件数据量除以worker线程数量worker_connections 10240;}http {include /etc/nginx/mime.types;# 如果Web程序没设置,Nginx也没对应文件的扩展名,就用Nginx 里默认的 default_type定义的处理方式,application/octet-stream是nginx默认类型default_type application/octet-stream;#  隐藏nginx版本信息,安全性考虑server_tokens off;# 统一使用utf-8字符集charset utf-8;# 日志格式log_format  main  '[time:$request_time s] $remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"''$upstream_addr $upstream_response_time $request_time $upstream_status ''"$http_range" "$sent_http_content_range"''"$gzip_ratio"''"$query_string"''"-http_refer:$http_referer"';# 在http层,所有server都会打印,可以移动到server层细分access_log  /var/log/nginx/access.log main;####以下内容为核心调整###### 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的负载sendfile on;# 必须在 sendfile 开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送)。tcp_nopush on# 也是防止网络阻塞,不过要包涵在keepalive_timeout参数才有效tcp_nodelay on# 优化http连接 客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接keepalive_timeout 65;# nginx日志缓存,降低日志IO。# max;文件描述符# inactive:日志文件在缓存中多长时间未使用就取消# min_uses: 在存活时间内日志被写入几次才会记录到缓存open_log_file_cache max=10240 inactive=60s valid=1m min_uses=2;##压缩配置gzip on;gizp_disable "MSIE [1-6]\."gzip_min_length 2k;gzip_buffers 4 16k;gzip_comp_level 3;gzip_vary on;gzip_types text/plain application/x-javascript application/javascript application/css  text/css application/xml;# Server配置include /etc/nginx/conf.d/*.conf;}

阅读全文 Read More

腾讯云平台WordPress建站问题记录

腾讯云平台WordPress建站问题记录

  1. 建站镜像杂乱,部分安装后无法访问。最终选择的镜像WordPress博客程序_v5.5.3(CentOS | LAMP
  2. 安装后安装主题时WordPress需要FTP,参考腾讯云FTP文档创建的是SFTP,WordPress默认不支持该方式
  3. 创建FTP时要先备份vsftpd.con,注意官方说的是修改配置文件,不是直接复制粘贴覆盖。万一覆盖可以选择重装yum reinstall -y vsftpd重装前删除vsftpd.con否则不会生成默认配置文件腾讯云FTP配置说明
  4. WordPress可以不依赖FTP直接进行更新
    cd /var/www/html/# 修改配置文件,增加方式设置vim wp-config.php
    define("FS_METHOD", "direct");define("FS_CHMOD_DIR", 0777);define("FS_CHMOD_FILE", 0777);
  5. 更新时提示无法创建目录
    #可以将该文件权限增加apache可执行权限chown -R apache:root /var/www/

阅读全文 Read More