首页 > 解决方案 > 如何将config.rpc.port的值从build.gradle读取到corda中的java类

问题描述

我创建了一个 constants.java 文件,如下所示,

public class Constants {

    public static final String CORDA_USER_NAME = "user1";
    public static final String CORDA_USER_PASSWORD = "test";
    public static final String CORDA_NODE_HOST = "localhost";
    public static final int CORDA_RPC_PORT = 10009;

}

但是在我上面的类中,我对值进行了硬编码,在我的应用程序中,我希望这个值应该是通用的。为此,我想从 build.gradle 中读取这些值。

这是我的 build.gradle 文件,

task runPartyAServer(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = 'net.corda.Server'
    environment "server.port", "10022"
    environment "config.rpc.username", "user1"
    environment "config.rpc.password", "test"
    environment "config.rpc.host", "localhost"
    environment "config.rpc.port", "10006"
}

task runPartyBServer(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = 'net.corda.Server'
    environment "server.port", "10033"
    environment "config.rpc.username", "user1"
    environment "config.rpc.password", "test"
    environment "config.rpc.host", "localhost"
    environment "config.rpc.port", "10009"
}

在 kotlin 中,我们可以选择从 build.gradle 读取值:

private const val CORDA_USER_NAME = "config.rpc.username"
private const val CORDA_USER_PASSWORD = "config.rpc.password"
private const val CORDA_NODE_HOST = "config.rpc.host"
private const val CORDA_RPC_PORT = "config.rpc.port"

@Component
open class NodeRPCConnection(
        @Value("\${$CORDA_NODE_HOST}") private val host: String,
        @Value("\${$CORDA_USER_NAME}") private val username: String,
        @Value("\${$CORDA_USER_PASSWORD}") private val password: String,
        @Value("\${$CORDA_RPC_PORT}") private val rpcPort: Int): AutoCloseable {
}

但在 java 中也是不允许的。请让我现在如何在 java 中做同样的事情。

标签: javagradlecorda

解决方案


在 Java 中,您将定义一个Constants.java文件,如下所示:

package net.corda.server;

public final class Constants {
    public static final String CORDA_USER_NAME = "config.rpc.username";
    public static final String CORDA_USER_PASSWORD = "config.rpc.password";
    public static final String CORDA_NODE_HOST = "config.rpc.host";
    public static final String CORDA_RPC_PORT = "config.rpc.port";
}

和一个NodeRPCConnection.java文件如下:

package net.corda.server;

import net.corda.client.rpc.CordaRPCClient;
import net.corda.client.rpc.CordaRPCConnection;
import net.corda.core.messaging.CordaRPCOps;
import net.corda.core.utilities.NetworkHostAndPort;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import static net.corda.server.Constants.*;

/**
 * Wraps a node RPC proxy.
 * <p>
 * The RPC proxy is configured based on the properties in `application.properties`.
 *
 * @param host     The host of the node we are connecting to.
 * @param rpcPort  The RPC port of the node we are connecting to.
 * @param username The username for logging into the RPC client.
 * @param password The password for logging into the RPC client.
 * @property proxy The RPC proxy.
 */
@Component
public class NodeRPCConnection implements AutoCloseable {
    @Value("${" + CORDA_NODE_HOST + "}")
    private String host;
    @Value("${" + CORDA_USER_NAME + "}")
    private String username;
    @Value("${" + CORDA_USER_PASSWORD + "}")
    private String password;
    @Value("${" + CORDA_RPC_PORT + "}")
    private int rpcPort;

    private CordaRPCConnection rpcConnection;
    public CordaRPCOps proxy;

    @PostConstruct
    public void initialiseNodeRPCConnection() {
        NetworkHostAndPort rpcAddress = new NetworkHostAndPort(host, rpcPort);
        CordaRPCClient rpcClient = new CordaRPCClient(rpcAddress);
        CordaRPCConnection rpcConnection = rpcClient.start(username, password);
        proxy = rpcConnection.getProxy();
    }

    @PreDestroy
    public void close() {
        rpcConnection.notifyServerAndClose();
    }
}

推荐阅读