问题遇到的现象和发生背景
将fabric-sdk-java作为工具类整合进入了springboot项目,在本地跑是没问题的,但是打jar包部署到服务器上就会报错
Caused by: java.nio.file.NoSuchFileException:
src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem
项目内文件夹情况
crypto-config内部太长了就不截了,但是文件是都有的
FabricUtil类(用来调用链码的类)
@Component
@Data
public class FabricUtil {
private Network network;
private Contract contract;
@PostConstruct
public void init() throws IOException, CertificateException, InvalidKeyException {
Properties properties = new Properties();
InputStream inputStream = FabricUtil.class.getResourceAsStream("/fabric.config.properties");
properties.load(inputStream);
String networkConfigPath = properties.getProperty("networkConfigPath");
String channelName = properties.getProperty("channelName");
String contractName = properties.getProperty("contractName");
//使用org1中的user1初始化一个网关wallet账户用于连接网络
String certificatePath = properties.getProperty("certificatePath");
X509Certificate certificate = readX509Certificate(Paths.get(certificatePath));
String privateKeyPath = properties.getProperty("privateKeyPath");
PrivateKey privateKey = getPrivateKey(Paths.get(privateKeyPath));
Wallet wallet = Wallets.newInMemoryWallet();
wallet.put("user1", Identities.newX509Identity("Org1MSP", certificate, privateKey));
//根据connection.json 获取Fabric网络连接对象
Gateway.Builder builder = Gateway.createBuilder()
.identity(wallet, "user1")
.networkConfig(Paths.get(networkConfigPath));
//连接网关
Gateway gateway = builder.connect();
//获取通道
Network network = gateway.getNetwork(channelName);
//获取合约对象
Contract contract = network.getContract(contractName);
this.contract = contract;
this.network = network;
}
private static X509Certificate readX509Certificate(final Path certificatePath) throws IOException, CertificateException {
try (Reader certificateReader = Files.newBufferedReader(certificatePath, StandardCharsets.UTF_8)) {
return Identities.readX509Certificate(certificateReader);
}
}
private static PrivateKey getPrivateKey(final Path privateKeyPath) throws IOException, InvalidKeyException {
try (Reader privateKeyReader = Files.newBufferedReader(privateKeyPath, StandardCharsets.UTF_8)) {
return Identities.readPrivateKey(privateKeyReader);
}
}
}
fabric.config.properties
# 网络配置文件路径
networkConfigPath = src/main/resources/connection.json
# 用户证书路径
certificatePath = src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem
# 用户私钥路径
privateKeyPath = src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk
# 通道名字
channelName = mychannel
# 链码名字
contractName = my_fabric