Есть ли способ, которым я могу повторно использовать свойство, определенное в pom.xml, как тип Integer в другом файле * .xml? - PullRequest
0 голосов
/ 04 июля 2019

Я настраиваю файл hazelcast.xml для своего проекта.У меня есть два профиля, определенные в pom.xml, и оба должны быть по-разному.Я объявил свойство в pom как и в каждом профиле я устанавливаю его равным 1 (prof1) или 2 (profile2).В файле hazelcast.xml, когда я пытаюсь получить доступ к этой переменной с помощью 3 $ {myId} 4, в среде IDE отображается ошибка, поскольку в файле hazelcast-config-2.1.xsd

* 1002 для 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>

Я пытаюсь получить значение порта многоадресной рассылки для 314 для профиля 1 и 324 для профиля 2

Журналы 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)

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

В pom.xml я забыл включить файл hazecast.xml, чтобы использовать объявленное свойство

<plugin>
  <configuration>
    <webResources>
      <resource>
        <filtering>true</filtering>
        <directory>webappDirectory</directory>
        <includes>
          <include>pathToHazelastFile</include>
        </includes>
      </resource>
    </webResources>
  </configuration>
</plugin>

    
      
0 голосов
/ 04 июля 2019

Переменные конфигурации Hazelcast заполняются во время выполнения, а не во время компиляции.Вы можете взглянуть на соответствующую документацию Hazelcast Using Variables .

Итак, в вашем случае:

  • , если вы используете Maven только для компиляции приложения,тогда вы не сможете использовать свойства Maven для заполнения переменных hazelcast.xml
  • , если вы также используете Maven для запуска своего приложения (mvn exec), тогда вы добавляете аргумент -DmyId=SOME_VALUE к своему pom.xml
...