wangJiaLun-go

王加伦的技术分享

0%

问题记录: no sapjco3 in java.library.path

对接厂家的SAP系统, 部署至linux环境时报下面的错误日志, 查了缺libsapjco3.so包

对应包下载地址 链接:https://pan.baidu.com/s/1YO0ZJq4J_SL9dI8VyuDsBg 提取码:8888

查了很多帖子是放在tomcat里, 现在springboot直接jar跑不方便加进去, 下面是配置到环境变量中

  • 错误日志

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.loadLibrary(DefaultJCoRuntime.java:441)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.registerNativeMethods(DefaultJCoRuntime.java:307)
    at com.sap.conn.jco.rt.JCoRuntime.registerNatives(JCoRuntime.java:969)
    at com.sap.conn.rfc.driver.CpicDriver.<clinit>(CpicDriver.java:955)
    at com.sap.conn.rfc.engine.DefaultRfcRuntime.getVersion(DefaultRfcRuntime.java:43)
    at com.sap.conn.rfc.api.RfcApi.RfcGetVersion(RfcApi.java:261)
    at com.sap.conn.jco.rt.MiddlewareJavaRfc.<clinit>(MiddlewareJavaRfc.java:200)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:73)
    at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:23)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:191)
    at com.sap.conn.jco.JCo.createJCo(JCo.java:52)
    at com.sap.conn.jco.JCo.<clinit>(JCo.java:26)
    at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:61)
    at com.changhong.vmi.admin.xfire.jco.SrmSapJCo.getGoodsPlan(SrmSapJCo.java:79)
  • 解决方案

    sapjco3.jarlibsapjco3.so上传到服务器上, 配置 /etc/profile

    1
    2
    3
    4
    5
    6
    7
    #java environment
    export JAVA_HOME=/usr/local/jdk/jdk1.8.0_181
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/sapjco3.jar
    export PATH=$PATH:${JAVA_HOME}/bin

    # 我把libsapjco3.so上传到这个路径下了
    export LD_LIBRARY_PATH=/usr/local/jdk/jdk1.8.0_181/jre/lib/amd64/server

centos7安装 rabbitMQ

  • 安装准备

  • 安装服务

    1
    2
    3
    4
    5
    6
    7
    8
    # 安装基础软件包
    yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
    # 安装erlang
    rpm -ivh erlang-24.0.5-1.el8.x86_64.rpm
    # 安装socat
    yum install -y socat
    # 安装rabbitMq
    rpm -ivh rabbitmq-server-3.8.22-1.el8.noarch.rpm
阅读全文 »

fastDFS配置nginx访问

  • nginx 安装教程

  • fastDFS 安装教程

  • 安装nginx插件 下载地址 或者fastDFS安装教程里面的百度云有

    1
    2
    3
    # 解压nginx的fastdfs压缩包
    tar -zxvf fastdfs-nginx-module-1.22.tar.gz
    cp mod_fastdfs.conf /etc/fdfs/
  • nginx重新make下add-module是nginx插件解压后的目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ./configure \
    --prefix=/usr/local/nginx \
    --pid-path=/var/run/nginx/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-http_gzip_static_module \
    --http-client-body-temp-path=/var/temp/nginx/client \
    --http-proxy-temp-path=/var/temp/nginx/proxy \
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
    --http-scgi-temp-path=/var/temp/nginx/scgi \
    --add-module=/root/package/fastdfs-nginx-module-1.22/src
    阅读全文 »

centos7 安装fastDFS

  • 安装gcc

    yum install -y gcc gcc-c++

  • 安装libevent

    yum -y install libevent

  • 安装libfastcommon

    libfastcommon是官方提供的FastDFS运行依赖的库 点此下载

    阅读全文 »

word转pdf的几种方法

需求是实现将word转换成pdf在线预览, 试了几种方法发现样式效果最好的是aspose-words,但是需要破解, 附带了激活码

centos7安装elasticsearch

  • 解压 tar -zxvf elasticsearch-6.4.3.tar.gz

  • 修改配置文件,默认不支持远程连接

    1
    2
    3
    4
    5
    cluster.name: es6
    node.name: node0
    path.data: /usr/local/elasticsearch-6.4.3/data
    path.logs: /usr/local/elasticsearch-6.4.3/logs
    network.host: 0.0.0.0
  • ElasticSearch 可以接收脚本执行,默认不支持root用户启动

    • 添加专门用户useradd elastic
    • 修改解压后elasticsearch文件夹所属用户chown -R elastic:elastic elasticsearch-6.4.3
    • 切换用户su elsearch后台启动./elasticsearch -d
  • 启动后会占用两个端口

    • 9200 是ES节点与外部通讯使用的端口, 是http协议的RESTful接口.
    • 9300 是ES节点之间通讯使用的端口, 是tcp通讯端口,集群间和TCPclient都走的9300。(java程序中使用ES时,在配置文件中要配置该端口)
阅读全文 »

解决公网ip经常变动

问题

​ 家里申请了电信的公网ip, 但是如果停电或者重新拨号都会导致这个ip变更.很多配置好的应用都需要重新配置ip地址太麻烦了

思考

  • 现成的产品类似花生壳这些内网穿透都要收费, 我已有公网ip感觉不划算

  • 想到了域名配置dns解析, 应用里面都配置域名代替ip地址.每次ip变了我只需要去改一下域名的dns解析就可以了

    但是还会有问题, 每次都需要手动改一下, 并且还必须得连上家里网才能知道最新的公网ip

  • 查了阿里云/腾讯云/华为云等等dns解析都对外提供了api文档, 思路是写个定时脚本获取到公网ip再与阿里云上的解析记录做比对,

    阿里云解析记录不是当前的公网ip的话, 更新阿里云的解析记录

阅读全文 »

Redis 三主三从集群模式

redis单机安装参照之前的 centos7安装redis

安装完成后在redis.conf修改配置

1
2
3
4
5
6
7
8
9
# 开启集群模式
cluster-enabled yes
# 每个集群节点都有一个集群配置文件。它是由Redis节点自动创建和更新的。每个Redis集群节点都需要一个不同的集群配置文件。
# 注:确保在同一系统中运行的实例没有重叠的集群配置文件名。集群的配置,配置文件首次启动自动生成。
cluster-config-file nodes-6379.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes
阅读全文 »

Redis 哨兵(sentinel)模式实现

之前搭建的主从复制(读写分离)在主节点宕机后,从节点依然可以提供数据读,但是不能进行数据写操作。

需要手动将某个从节点切换成主节点才行,哨兵模式就是解决这个手动操作的问题。

当一个集群中的master失效之后,sentinel可以选举出一个新的master继续工作,然后通过发布订阅模式通知其他从服务器,修改配置切换主节点。

核心配置 sentinel.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 保护模式
protected-mode no
# 配置端口
port 26379
# 以守护进程模式启动(后台运行)
daemonize yes
# 日志文件
logfile /usr/local/redis/sentinel/redis-sentinel.log
# 工作目录
dir /usr/local/redis/sentinel/

# 配置哨兵
sentinel monitor mymaster 192.168.14.101 6379 2
# 密码
sentinel auth-pass mymaster wangjialun
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 故障转移开始,三分钟内没有完成,则认为转移失败
sentinel failover-timeout mymaster 180000
阅读全文 »