1

我的 10_channel_jpos.xml 中有一个通道配置,我希望能够从属性文件中获取 ip 和端口并从我的代码中设置它,因为这些值可能会改变

<channel-adaptor
      name="mybank-channel-adaptor-pri"
      class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">

   <channel name="ServerA-Channel" class="org.jpos.iso.channel.NACChannel" 
            logger="Q2" realm="ServerA-Channel" 
            packager="org.jpos.iso.packager.ISO87APackager"> 

        <property name="timeout" value="3600000"/>
        <property name="host" value="${myBankHostPrimary}"/>
        <property name="port" value="${myBankPortPrimary}"/>
        <property name="packager-config" value="cfg/base1.xml" />
        <property name="keep-alive" value="true" />
    </channel>

    <in>from-mybank-pri</in>
    <out>to-mybank-pri</out>
    <reconnect-delay>5000</reconnect-delay>
</channel-adaptor>

和一个属性文件

###### GENERAL INFO
NODE = NODE001
######  Environment
env=DEV
######  Ports we listens to
server_listen_port = 9999
######  Target host information
myBankHostPrimary=127.0.0.1
myBankPortPrimary=8001
###### DEBUG STUFF
debugParticipant=true

和一个主要课程

public static void main (String[] args) throws Exception {
        ChannelAdaptor channel= (ChannelAdaptor) NameRegistrar.get ("mybank-channel-adaptor-pri");

channel.setHost = "127.0.0.1"; // Value gotten from the property file
            System.out.println(channel.getHost());
    }

请问如何设置属性主机值和端口值?

我的文件夹结构是

bin
.....bsh
.....q2.bat
.....start.bat
.....stop


build
    ......META-INF
             .......org
                      .......jpos
                              ........config
                                       ......Q2-decorator.property
    .....cfg
          .....config.properties (my property file)
4

3 回答 3

1

除了前面的答案,您可以将configuration-factory属性添加到您的<channel>元素并创建您自己的 ConfigurationFactory。然后你的实现可以从任何你想要的地方选择属性值。

你可以在这里找到一个例子:https ://github.com/jpos/jPOS-EE/blob/master/modules/sysconfig/src/main/java/org/jpos/ee/SysConfigConfigurationFactory.java

sysconfigSysconfigConfigurationFactory 从数据库的表中挑选属性。您可以将其用作创建自己的自定义解决方案的灵感。

于 2017-12-13T02:46:52.213 回答
0

如果要在启动 Q2 之前更改属性,则需要使用 装饰器。这现在包含在标准 jpos 中。

正如 该页面所述,您需要在您的项目中创建一个资源,该资源位于类路径的“META-INF/org/jpos/config/Q2-decorator.properties”(不是文件系统!)。

内容:

config-decorator-class=org.jpos.q2.freemarker.FreemarkerDecorationProvider    (1)
config-files=cfg/config.properties                                            (2)
  1. 此属性告诉 Q2 使用 FreemarkerDecoratorProvider 作为其装饰器。
  2. 此属性定义将用作配置文件的文件的逗号分隔列表。

在 cfg/properties 中将是您的属性文件。

您还必须向 org.jpos.ee:jposee-freemarker-decorator 添加依赖项。我不知道你是用 maven 还是 gradle 构建的。

于 2017-12-12T12:23:39.347 回答
0

您需要执行以下步骤:

  • 停止频道
  • 设置通道和端口
  • 启动频道

在您的代码中,您将执行以下操作:

channel.stop();
channel.setPort(port);
channel.setHost(host);
channel.start();
于 2017-12-12T11:33:19.033 回答