环境 : ubuntu20
xuperchain 5.3
go 1.17
springboot : 2.5.14
前言
请提前启动好xchain的节点,我选择简单启一个xchain节点作为测试,并且使用默认端口37101
SpringBoot项目初始化
我们先进行SpringBoot项目的配置进行讲解,这里有一个空的SpringBoot项目[这个项目目前只导入了SpringWeb依赖和hutool包]。
然后我们需要在项目的pom.xml
里面导入xchain的sdk依赖包
<dependency>
<groupId>com.baidu.xuper</groupId>
<artifactId>xuper-java-sdk</artifactId>
<version>0.3.0</version>
</dependency>
导入成功效果
配置xchain参数说明
然后我们在application.properties
文件进行编写相关xchain配置
server.port=7070 # web服务的端口号
xuperchain.keys=/src/main/resources/ # 节点管理员的私钥文件路径
xuperchain.client.url=192.168.19.133:37101 # 节点的ip和端口
这个节点管理员的私钥我们选择存放在resources文件夹里面,并且需要命名为private.key
这个私钥我们在xuperchain项目的output/data/keys/private.key,使用其他多节点搭建的方式,管理员私钥文件也会存在节点的data/keys目录下
配置 XchainConfig
然后我们编写一个XchainConfig类,进行配置加载接入
package com.yijiuyiyi.helloworld.config;
import com.baidu.xuper.api.Account;
import com.baidu.xuper.api.XuperClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
public class XchainConfig {
@Value("${xuperchain.client.url}")
private String url;
@Value("${xuperchain.keys}")
private String key;
XuperClient client;
Account account;
@PostConstruct
public void initField() {
client = new XuperClient(url); // 创建客户端
String keyPath = System.getProperty("user.dir")+key; // 由于Account.create()方法需要绝对路径,所以需要用此代码获取完整的路径
account = Account.create(keyPath);
System.out.println("path: "+keyPath);
System.out.println("成功初始化");
}
}
我们重启一下项目,如果不报错,证明配置加载成功
调用xchain的获取区块高度
这里我们创建一个controller类,然后写一个get方法,方法里面是使用client去获取xchain的信息,我们这次去获取一个当前的区块高度
package com.yijiuyiyi.helloworld.controller;
import com.baidu.xuper.api.XuperClient;
import com.baidu.xuper.pb.XchainOuterClass;
import com.yijiuyiyi.helloworld.config.XchainConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class BlockController {
@Autowired
private XchainConfig xchainConfig;
@GetMapping("/getBlockHeight")
public Map<String, Object> getBlockHeight(){
XuperClient client = xchainConfig.getClient();
XchainOuterClass.BCStatus bcs = client.getBlockchainStatus("xuper");
XchainOuterClass.InternalBlock getBlocks = bcs.getBlock();
long height = getBlocks.getHeight();
Map<String,Object> map = new HashMap<>();
map.put("height",height);
return map;
}
}
然后重启项目,使用postman进行测试此接口
成功获取区块高度
结语
这是简单的xchain对接springboot项目,接下来的篇章将介绍和使用xchain的javasdk包下的方法,进行部署合约,调用合约,查询合约等相关接口功能