Spring Boot 整合 Fisco Bcos的案例分析(区块链)

目录
  • 简介
  • 本地环境
  • 主要流程:
  • 1、Fisco Bcos环境搭建与验证
    • 1.1、搭建单群组4节点联盟链:
    • 1.2、检查证书
    • 1.3、使用证书验证节点正确性
  • 2、创建SpringBoot工程并配置依赖
    • 2.1、创建SpringBoot工程:
    • 2.2、配置pom.xml
    • 3.2、配置节点证书:
    • 3.3、编写controller
    • 3.4、DemoBcosApplication默认不做修改
    • 3.5、application.properties什么也没配置
  • 4、生成jar包、部署服务器验证
    • 4.1、本地先跑一把
    • 4.2、打包jar
    • 4.3、把jar包发送到远程服务器上,并运行:
  • 总结

本篇文章介绍 Spring Boot 整合 Fisco Bcos 的相关技术

简介

FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源。

目前,成熟的区块链的平台不少,之所以选择FISCO BCOS,主要是因为文档细致,容易入门。

官方地址入口

本地环境

本篇文章介绍的 Spring Boot 整合 Fisco Bcos的案例,是在阿里云服务器上部署验证的。
我这边共有两台电脑:
电脑1:本地的Mac电脑,没有区块链环境,只是用于SpringBoot工程的开发;
电脑2:阿里云上的CentOS服务器,配置了区块链环境,合约部署、编译、SpringBoot工程的jar包运行都是在该电脑上;

大家可根据自己的电脑环境,对比该案例进行开发即可。

主要流程:

--> 1、Fisco Bcos环境搭建与验证
--> 2、创建SpringBoot工程并配置依赖
--> 3、编写案例代码
--> 4、生成jar包、部署服务器验证

1、Fisco Bcos环境搭建与验证

Fisco Bcos环境搭建参考的是官方的文档:
搭建第一个区块链网络
我这边测试服务器的操作系统是CentOS,如果是其他操作系统,也是参照该文档进行配置,流程是类似的。
详细流程,大家参照文档进行配置就行了,这里主要说下关键的细节:

1.1、搭建单群组4节点联盟链:

我这边使用的是国密版本命令:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -g -G

主要原因:

我这边使用的Fisco Bcos SDK版本是2.8.0,加载证书时默认会加载国密证书(应该有加载证书类型的选项配置,目前暂未找到相关API)。
如果使用的是非国密版本命令,在/fisco/node/127.0.0.1/sdk/目录下不会生成国密证书,使用该SDK就会报错。

1.2、检查证书

成功启动所有节点后,在/fisco/node/127.0.0.1/sdk/目录下验证所有证书是否存在(gm代表国密),如下图:

1.3、使用证书验证节点正确性

启动节点后,我们可以使用Fisco Bcos提供的本地控制台程序console对节点进行验证。
大家参照文档,先下载、配置控制台程序。
注意:为控制台程序配置节点证书(即:将/fisco/node/127.0.0.1/sdk/下的证书全部复制到控制台程序的 /console/conf/目录下)

启动控制台,测试节点,例如:获取区块链数据高度:getBlockNumber:
如果能正常部署合约,且能获得数据高度,则区块链环境没什么问题,如下图:

2、创建SpringBoot工程并配置依赖

服务端区块链环境已完成验证,接下来,我们创建SpringBoot工程,并集成Fisco Bcos Java版SDK。
Java SDK 文档

2.1、创建SpringBoot工程:

仅勾选Spring Web即可:

2.2、配置pom.xml

注意:SpringBoot版本不宜过高(已与官方技术人员确认),我这边试过2.6.2+,Demo案例调用节点时会异常闪退,当把版本降低为2.4.2就正常了:

配置Fisco Bcos Java版SDK依赖:

pom.xml完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qxc</groupId>
    <artifactId>demo_bcos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo_bcos</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.fisco-bcos.java-sdk</groupId>
            <artifactId>fisco-bcos-java-sdk</artifactId>
            <version>2.8.0</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3、编写案例代码

3.1、配置Fisco Bcos:

Java SDK » 配置说明
为了简单,本案例将Fisco Bcos的参数通过xml统一配置,并在代码中自动读取。
在/src/main/resources/目录下创建文件fisco-config.xml:

fisco-config.xml完整代码:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
    <bean id="defaultConfigProperty" class="org.fisco.bcos.sdk.config.model.ConfigProperty">
        <property name="cryptoMaterial">
            <map>
                <entry key="certPath" value="conf" />
            </map>
        </property>
        <property name="network">
            <map>
                <entry key="peers">
                    <list>
                        <value>127.0.0.1:20200</value>
                        <value>127.0.0.1:20201</value>
                    </list>
                </entry>
            </map>
        </property>
        <property name="account">
            <map>
                <entry key="keyStoreDir" value="account" />
                <entry key="accountAddress" value="" />
                <entry key="accountFileFormat" value="pem" />
                <entry key="password" value="" />
                <entry key="accountFilePath" value="" />
            </map>
        </property>
        <property name="threadPool">
            <map>
                <entry key="channelProcessorThreadSize" value="16" />
                <entry key="receiptProcessorThreadSize" value="16" />
                <entry key="maxBlockingQueueSize" value="102400" />
            </map>
        </property>
    </bean>
    <bean id="defaultConfigOption" class="org.fisco.bcos.sdk.config.ConfigOption">
        <constructor-arg name="configProperty">
            <ref bean="defaultConfigProperty"/>
        </constructor-arg>
    </bean>
    <bean id="bcosSDK" class="org.fisco.bcos.sdk.BcosSDK">
        <constructor-arg name="configOption">
            <ref bean="defaultConfigOption"/>
        </constructor-arg>
    </bean>
</beans>

3.2、配置节点证书:

把区块链节点下的证书拷贝到/src/main/resources/conf/目录下(conf目录为fisco-config.xml配置的证书路径):

3.3、编写controller

BcosController完整代码:

package com.qxc.demo_bcos.controller;
import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.client.protocol.response.BlockNumber;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BcosController {
    @GetMapping("/test")
    public String test(){
        System.out.println("-----test------");
        return "this is bcos demo";
    }
    @GetMapping("/block")
    public String getBlockNumber(){
        System.out.println("-----getBlockNumber getBlockNumber------");
        @SuppressWarnings("resource")
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:fisco-config.xml");
        System.out.println("-----getBlockNumber ClassPathXmlApplicationContext ok------");
        BcosSDK bcosSDK = context.getBean(BcosSDK.class);
        System.out.println("-----getBlockNumber BcosSDK ok------");
        Client client = bcosSDK.getClient(Integer.valueOf(1));
        System.out.println("-----getBlockNumber client ok------");
        BlockNumber blockNumber = client.getBlockNumber();
        return "getBlockNumber: "+blockNumber.getBlockNumber().toString();
//        return "";
    }
}

3.4、DemoBcosApplication默认不做修改

3.5、application.properties什么也没配置

为了简单,端口我这边直接使用8080,主要是个人比较懒,什么都懒得配置了,O(∩_∩)O~

4、生成jar包、部署服务器验证

4.1、本地先跑一把

SpringBoot的开发是在我本地的Mac电脑上进行的,为了能稳妥的部署到远程CentOS服务器上,
先在本地跑一把,看看工程编译运行是否正常(此时不用测试区块链功能,因为我本地并没有区块链环境):

没问题,完美。

4.2、打包jar

4.3、把jar包发送到远程服务器上,并运行:

案例程序已在服务器端跑起来了,回到本地mac电脑,远程连服务器试一下吧(IP就不展示给大家看了哈):

至此,使用Spring Boot 整合 Fisco Bcos 最最基本的案例已完成。

总结

Fisco Bcos 的使用还是很简单的,如果有问题大家可以直接查询官方技术文档,也欢迎留言讨论,咱们共同学习、共同进步,哈哈~~。

下一节:Spring Boot 整合 Fisco Bcos(部署、调用区块链合约)

到此这篇关于Spring Boot 整合 Fisco Bcos(区块链)的文章就介绍到这了,更多相关Spring Boot 整合 Fisco Bcos区块链内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot 整合 Fisco Bcos部署、调用区块链合约的案例

    本篇文章介绍 Spring Boot 整合 Fisco Bcos 的相关技术(合约的调用) 简介 在上一节,介绍了Spring Boot 整合 Fisco BCOS的最最基础的案例(SpringBoot成功连接Fisco BCOS,并访问其节点网络 --> 文章链接). 本节,咱们继续介绍Spring Boot 整合 Fisco BCOS的最最重要的技术点:部署.调用区块链合约(基于上一节的工程案例). 主要流程 --> 1.合约开发(省略,因为是案例演示,直接使用 Fisco BCOS自带的

  • Spring Boot 整合 Fisco Bcos的案例分析(区块链)

    目录 简介 本地环境 主要流程: 1.Fisco Bcos环境搭建与验证 1.1.搭建单群组4节点联盟链: 1.2.检查证书 1.3.使用证书验证节点正确性 2.创建SpringBoot工程并配置依赖 2.1.创建SpringBoot工程: 2.2.配置pom.xml 3.2.配置节点证书: 3.3.编写controller 3.4.DemoBcosApplication默认不做修改 3.5.application.properties什么也没配置 4.生成jar包.部署服务器验证 4.1.本地

  • Spring Boot + Mybatis 实现动态数据源案例分析

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据源方案进行解决.接下来,我们就来讲解如何实现动态数据源,以及在过程中剖析动态数据源背后的实现原理. 实现案例 本教程案例基于 Spring Boot + Mybatis + MySQL 实现. 数据库设计 首先需要安装好MySQL数据库,新建数据库 master,slave,分别创建用户表,用

  • Spring Boot整合Elasticsearch实现全文搜索引擎案例解析

    简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎.Elastic Search是一个开源的,分布式,实时搜索和分析引擎.Spring Boot为Elasticsearch及Spring Data Elasticsearch提供的基于它的抽象提供了基本的配置.Spring Boot提供了一个用于聚集依赖的spring-boot-starter-data-elasticsearch 'StarterPOM'. 引入spring-boot-starter-dat

  • Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例

    前言 距离第一篇 Spring Boot 系列的博文 3 个月了.虽然 XML 形式是我比较推荐的,但是注解形式也是方便的.尤其一些小系统,快速的 CRUD 轻量级的系统. 这里感谢晓春 http://xchunzhao.tk/ 的 Pull Request,提供了 springboot-mybatis-annotation 的实现. 一.运行 springboot-mybatis-annotation 工程 然后Application 应用启动类的 main 函数,然后在浏览器访问: http

  • Spring Boot整合Zookeeper实现分布式锁的场景分析

    目录 一.Java当中关于锁的概念 1.1.什么是锁 1.2.锁的使用场景 1.3.什么是分布式锁 1.4.分布式锁的使用场景 二.zk实现分布式锁 2.1.zk中锁的种类: 2.2.zk如何上读锁 2.3.zk如何上写锁 2.4.⽺群效应 三.springboot整合分布式锁 温馨提示:本篇文章要求掌握zk的数据结构,以及临时序号节点! zk实现分布式锁完全是依靠zk节点类型当中的临时序号节点来实现的 一.Java当中关于锁的概念 1.1.什么是锁 锁是用来控制多个线程访问共享资源的方式,一般

  • Java Spring Boot消息服务万字详解分析

    目录 消息服务概述 为什么要使用消息服务 异步处理 应用解耦 流量削峰 分布式事务管理 常用消息中间件介绍 ActiveMQ RabbitMQ RocketMQ RabbitMQ消息中间件 RabbitMQ简介 RabbitMQ工作模式介绍 Work queues(工作队列模式) Public/Subscribe(发布订阅模式) Routing(路由模式) Topics(通配符模式) RPC Headers RabbitMQ安装以及整合环境搭建 安装RabbitMQ 下载RabbitMQ 安装R

  • 使用spring boot 整合kafka,延迟启动消费者

    spring boot 整合kafka,延迟启动消费者 spring boot整合kafka的时候一般使用@KafkaListener来设置消费者,但是这种方式在spring启动的时候就会立即开启消费者.如果有需要根据配置信息延迟开启指定的消费者就不能使用这种方式. 参考了类:KafkaListenerAnnotationBeanPostProcessor,我提取了一部分代码.可以根据需要随时动态的开启消费者.还可以很方便的启动多个消费者. 为了方便使用,我自定义了一个注解: import or

  • 关于spring boot整合kafka+注解方式

    目录 spring boot自动配置方式整合 spring boot自动配置的不足 spring boot下手动配置kafka 批量消费消息 spring boot整合kafka报错 spring boot自动配置方式整合 spring boot具有许多自动化配置,对于kafka的自动化配置当然也包含在内,基于spring boot自动配置方式整合kafka,需要做以下步骤. 引入kafka的pom依赖包 <!-- https://mvnrepository.com/artifact/org.s

  • Spring Boot整合ELK实现日志采集与监控

    目录 Spring Boot整合ELK实现日志采集与监控 前言 架构图示 ELK搭建 Spring Boot工程配置 验证 查看logstash是否接收到日志 查看索引是否已经生效 日志分析 结语 Spring Boot整合ELK实现日志采集与监控 前言 在分布式项目中,可以采用ELK来作为日志的收集与分析系统,提供一个统一的入口来对日志进行收集,访问和管理.本文主要演示Spring Boot项目与ELK整合来实现日志的采集与监控. 架构图示 本次测试工程中,采用的架构如下图所示,微服务通过TC

随机推荐