java - 如何将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 中做同样的事情。
解决方案
在 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();
}
}