首页 > 解决方案 > 有没有办法可以重用 pom.xml 中定义的属性,作为另一个 *.xml 文件中的整数类型?

问题描述

我正在为我的项目设置 hazelcast.xml 文件。我在 pom.xml 中定义了两个配置文件,并且都需要在不同的 . 我在 pom 中声明了一个属性,并在每个配置文件中将其设置为 1 (prof1) 或 2 (profile2)。在 hazelcast.xml 中,当我尝试使用 3${myId}4 访问此变量时,IDE 显示错误,因为在 hazelcast-config-2.1.xsd 中将 mulitcast-port 定义为仅“int”

由于多播端口的限制和基础定义为“xs:int”,因此访问 ${myId} 无法成为字符串。

<!-- pom.xml -->

    <profiles>
        <profile>
            <id>testProfile1</id>
            <properties>
                <myId>1</myId>
            </properties>
        </profile>

        <profile>
            <id>testProfile2</id>
            <properties>
                <myId>2</myId>
            </properties>
        </profile>
    </profiles>

<!--hazelcast.xml-->

    <network>
        <port auto-increment="true">5701</port>
        <join>
            <multicast enabled="true">
                <multicast-group>someGroup${myId}</multicast-group>
                <multicast-port>3${myId}4</multicast-port>
            </multicast>
            <tcp-ip enabled="false">
                <member>localhost</member>
            </tcp-ip>
        </join>
        <socket-interceptor enabled="false" />
    </network>

我正在尝试将多播端口值设置为 profile1 的 314 和 profile2 的 324

Tomcat日志:

Caused by: java.lang.NumberFormatException: For input string: "3${myId}4"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at com.hazelcast.config.XmlConfigBuilder.handleMulticast(XmlConfigBuilder.java:489)
    at com.hazelcast.config.XmlConfigBuilder.handleJoin(XmlConfigBuilder.java:435)
    at com.hazelcast.config.XmlConfigBuilder.handleNetwork(XmlConfigBuilder.java:266)
    at com.hazelcast.config.XmlConfigBuilder.handleConfig(XmlConfigBuilder.java:188)
    at com.hazelcast.config.XmlConfigBuilder.parse(XmlConfigBuilder.java:181)
    at com.hazelcast.config.XmlConfigBuilder.build(XmlConfigBuilder.java:135)

标签: javaxmlspringpom.xmlhazelcast

解决方案


Hazelcast 配置变量在运行时填充,而不是在编译时填充。您可以查看相关的Hazelcast Using Variables 文档

所以,在你的情况下:

  • 如果您使用 Maven 只是为了编译您的应用程序,那么您不能使用 Maven 属性来填充 hazelcast.xml 变量
  • 如果您还使用 Maven 来运行您的应用程序 ( mvn exec),那么您将参数添加-DmyId=SOME_VALUE到您的pom.xml

推荐阅读