附录¶
1. 安装问题¶
1.1 Java部署¶
CentOS环境安装Java¶
注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK下载链接。
# 创建新的文件夹,安装Java 8或以上的版本,将下载的jdk放在software目录
# 从Oracle官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)选择Java 8或以上的版本下载,例如下载jdk-8u201-linux-x64.tar.gz
$ mkdir /software
# 解压jdk
$ tar -zxvf jdk-8u201-linux-x64.tar.gz
# 配置Java环境,编辑/etc/profile文件
$ vim /etc/profile
# 打开以后将下面三句输入到文件里面并保存退出
export JAVA_HOME=/software/jdk-8u201 #这是一个文件目录,非文件
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 生效profile
$ source /etc/profile
# 查询Java版本,出现的版本是自己下载的版本,则安装成功。
java -version
1.2. 数据库部署¶
此处以Centos安装MariaDB为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。其他安装方式请参考MySQL官网。
① 安装MariaDB¶
- 安装命令
sudo yum install -y mariadb*
- 启停
启动:sudo systemctl start mariadb.service
停止:sudo systemctl stop mariadb.service
- 设置开机启动
sudo systemctl enable mariadb.service
- 初始化
执行以下命令:
sudo mysql_secure_installation
以下根据提示输入:
Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
② 授权访问和添加用户¶
- 使用root用户登录,密码为初始化设置的密码
mysql -uroot -p -h localhost -P 3306
- 授权root用户远程访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
- 创建test用户并授权本地访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
安全温馨提示:
- 例子中给出的数据库密码(123456)仅为样例,强烈建议设置成复杂密码
- 例子中root用户的远程授权设置会使数据库在所有网络上都可以访问,请按具体的网络拓扑和权限控制情况,设置网络和权限帐号
③ 测试连接和创建数据库¶
- 登录数据库
mysql -utest -p123456 -h localhost -P 3306
- 创建数据库
mysql > create database webasetransaction;
2. 常见问题¶
2.2 构建失败¶
“gradle build -x test”失败,不能编译Lombok注解:
...
/data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/trans/TransService.java:175: error: cannot find symbol
log.warn("save fail. contract is not deploed", contractAddress);
^
symbol: variable log
location: class TransService
/data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/trans/TransService.java:183: error: cannot find symbol
log.warn("call fail. contractAddress:{} abi is not exists", contractAddress);
^
symbol: variable log
location: class TransService
Note: /data/trans/webase-transcation/src/main/java/com/webank/webase/transaction/util/ContractAbiUtil.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
100 errors
FAILURE: Build failed with an exception.
...
答: 修改 build.gradle文件,将以下代码的注释去掉
//annotationProcessor 'org.projectlombok:lombok:1.18.2'
2.3 启动报错“nested exception is javax.net.ssl.SSLException”¶
...
nested exception is javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates.
答:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点,因此在使用CentOS操作系统时,推荐从OpenJDK网站自行下载。
2.4 启动报错“Processing bcos message timeout”¶
[main] ERROR SpringApplication() - Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scheduleService': Unsatisfied dependency expressed through field 'transService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'transService': Unsatisfied dependency expressed through field 'web3jMap'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'web3j' defined in class path resource [com/webank/webase/transaction/config/Web3Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.HashMap]: Factory method 'web3j' threw exception; nested exception is java.io.IOException: Processing bcos message timeout
答:一些Oracle JDK版本缺少相关包,导致节点连接异常。推荐使用OpenJDK,从OpenJDK网站自行下载。
3. application.properties配置项说明¶
配置项 | 说明 |
---|---|
server.port | 工程服务端口 |
server.context-path | 工程跟URI |
mybatis.mapper-locations | mapper路径 |
logging.config | 日志文件路径 |
sdk.orgName | 机构名 |
sdk.timeout | sdk连接超时时间 |
sdk.corePoolSize | sdk线程池配置 |
sdk.maxPoolSize | sdk线程池配置 |
sdk.queueCapacity | sdk线程池配置 |
sdk.keepAlive | sdk线程池配置 |
sdk.groupConfig.allChannelConnections[0].groupId | sdk连接的群组id |
sdk.groupConfig.allChannelConnections[0].connectionsStr[0] | sdk连接的节点的ip和channelPort |
sdk.encryptType | sdk的加密类型:0:标准,1:国密,需要与链的类型一致 |
constant.signServer | WeBASE-Sign签名服务ip端口 |
constant.privateKey | 本地配置私钥 |
constant.cronTrans | 轮询上链时间间隔 |
constant.requestCountMax | 重复请求上链最大次数 |
constant.selectCount | 每次查询未上链数据条数 |
constant.intervalTime | 未上链数据查询时间间隔 |
constant.sleepTime | 多线程时间间隔 |
constant.ifDeleteData | 是否删除数据 |
constant.cronDeleteData | 删除数据任务时间间隔 |
constant.keepDays | 数据保留天数 |
constant.ifDistributedTask | 是否使用分布式任务部署多活 |
job.regCenter.serverLists | 部署多活的话需配置zookeeper,支持集群 |
job.regCenter.namespace | zookeeper命名空间 |
job.dataflow.shardingTotalCount | 分片数 |
sharding.jdbc.datasource.names | 配置所有的数据源,对应多个数据库 |
sharding.jdbc.datasource.ds0.type | 数据连接池类型 |
sharding.jdbc.datasource.ds0.driver-class-name | 数据驱动 |
sharding.jdbc.datasource.ds0.url | 数据库连接url |
sharding.jdbc.datasource.ds0.username | 数据库用户名 |
sharding.jdbc.datasource.ds0.password | 数据库密码 |
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column | 数据库分片列 |
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression | 分片算法行表达式,需符合groovy语法 |
sharding.jdbc.config.sharding.tables.tb_deploy_transaction.actual-data-nodes | 由数据源名 + 表名组成,以小数点分隔 |
sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.sharding-columns | 复合分片场景的分片列名称,多个列以逗号分隔 |
sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.algorithm-class-name | 复合分片算法类名称。该类需实现ComplexKeysShardingAlgorithm接口 |
sharding.jdbc.config.sharding.tables.tb_deploy_transaction.key-generator-column-name | 自增列名称 |
sharding.jdbc.config.props.sql.show | 是否开启SQL显示 |