2

我需要使用 Spring 设置 Hazelcast 会话缓存。使用 hazelcast 文档中的配置很简单。然而,它是不够的。我需要为我的每个环境(DEV、QA、PROD)使用不同的配置文件。或者(理想情况下),我想使用 spring bean 中的几个属性,这些属性将在 spring 容器的初始化期间设置。根据 hazelcast 文档,我需要为每个环境设置一个组。像这样:

<hazelcast>
    <group>
       <name>dev</name>
       <password>dev-pass</password>
   </group>
   ...
</hazelcast>

作为奖励,我希望缓存是用于会话和应用程序级对象(地图、队列等)的单个缓存。

任何人都可以分享他们如何做到这一点的例子吗?谢谢您的帮助。

4

3 回答 3

4

感谢您提供建议的答案。但是,我想我已经使用以下配置解决了这个问题。我将不胜感激任何人对此配置的任何反馈。

我的做法:

1)使用spring配置建立实例。2) 使用带有 Web 过滤器配置的最低配置 hazelcast.xml 文件增强实例。请注意,多播和 tcp-ip 加入者是错误的。

网页.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/servlet-context.xml,
            /WEB-INF/spring/root-context.xml,
            ....
            /WEB-INF/spring/hazelcastContext.xml
        </param-value>
    </context-param>


<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>
....

<filter>
    <filter-name>hazelcast-filter</filter-name>
    <filter-class>com.hazelcast.web.WebFilter</filter-class>
    <!--
        Name of the distributed map storing
        your web session objects
    -->
    <init-param>
        <param-name>map-name</param-name>
        <param-value>my-sessions</param-value>
    </init-param>
    <!--
        How is your load-balancer configured?
        stick-session means all requests of a session
        is routed to the node where the session is first created.
        This is excellent for performance.
        If sticky-session is set to false, when a session is updated
        on a node, entry for this session on all other nodes is invalidated.
        You have to know how your load-balancer is configured before
        setting this parameter. Default is true.
    -->
    <init-param>
        <param-name>sticky-session</param-name>
        <param-value>true</param-value>
    </init-param>
    <!--
        Name of session id cookie
    -->
    <init-param>
        <param-name>cookie-name</param-name>
        <param-value>hazelcast.sessionId</param-value>
    </init-param>
    <!--
        Domain of session id cookie. Default is based on incoming request.
    -->
    <init-param>
        <param-name>cookie-domain</param-name>
        <param-value>.mycompany.com</param-value>
    </init-param>
    <!--
        Should cookie only be sent using a secure protocol? Default is false.
    -->
    <init-param>
        <param-name>cookie-secure</param-name>
        <param-value>false</param-value>
    </init-param>
    <!--
        Should HttpOnly attribute be set on cookie ? Default is false.
    -->
    <init-param>
        <param-name>cookie-http-only</param-name>
        <param-value>false</param-value>
    </init-param>
    <!--
        Are you debugging? Default is false.
    -->
    <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
    </init-param>
    <!--
        Configuration xml location;
            * as servlet resource OR
            * as classpath resource OR
            * as URL
        Default is one of hazelcast-default.xml
        or hazelcast.xml in classpath.
    -->

    <init-param>
        <param-name>config-location</param-name>
        <param-value>/WEB-INF/classes/hazelcast.xml</param-value>
    </init-param>

    <!--
        Do you want to use an existing HazelcastInstance?
        Default is null.
    -->`enter code here`
    <init-param>
        <param-name>instance-name</param-name>
        <param-value>myapp</param-value>
    </init-param>
    <!--
        Do you want to connect as a client to an existing cluster?
        Default is false.
    -->
    <init-param>
        <param-name>use-client</param-name>
        <param-value>false</param-value>
    </init-param>
    <!--
        Client configuration location;
            * as servlet resource OR
            * as classpath resource OR
            * as URL
        Default is null.
    -->
    <init-param>
        <param-name>client-config-location</param-name>
        <param-value>/WEB-INF/classes/hazelcast-client.properties</param-value>
    </init-param>
        <!--
            Do you want to shutdown HazelcastInstance during
            web application undeploy process?
            Default is true.
        -->
        <init-param>
            <param-name>shutdown-on-destroy</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>hazelcast-filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

...

</web-app>

hazelcast.xml(从 jar 文件中的 hazelcast.xml 复制)...

<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-2.4.xsd"
           xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

...
<network>
    <port auto-increment="true">5701</port>
    <outbound-ports>
        <!--
        Allowed port range when connecting to other nodes.
        0 or * means use system provided port.
        -->
        <ports>0</ports>
    </outbound-ports>
    <join>
        <multicast enabled="false">
            <multicast-group>224.2.2.3</multicast-group>
            <multicast-port>54327</multicast-port>
        </multicast>
        <tcp-ip enabled="false">
            <interface>127.0.0.1</interface>
        </tcp-ip>
 ...
    </join>
 ...
</network>

...  

</hazelcast>

弹簧配置....

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hz="http://www.hazelcast.com/schema/spring"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.hazelcast.com/schema/spring
http://www.hazelcast.com/schema/spring/hazelcast-spring-2.4.xsd">


<bean id="hazelcast" class="com.hazelcast.core.Hazelcast" />

<!-- Hazelcast Instance configuration -->
<hz:hazelcast id="myapp">
    <hz:config>
        <!-- Hazelcast Instance Name -->
        <hz:instance-name>${hz.instance.name}</hz:instance-name>
        <!-- Hazelcast Group Name and Password -->
        <hz:group name="${hz.group.name}" password="${hz.group.password}" />
        <!-- Hazelcast Management Center URL -->
        <hz:management-center enabled="${hz.management.center.enabled}" url="${hz.management.center.url}" />
        <!-- Hazelcast Tcp based network configuration -->
        <hz:network port="${hz.network.port}" port-auto-increment="${hz.network.port.auto.increment}">
            <hz:join>
                <hz:multicast enabled="${hz.multicast.enabled}" multicast-group="224.2.2.3" multicast-port="54327" />
                <hz:tcp-ip enabled="${hz.tcp.ip.enabled}">
                    <hz:members>${hz.members}</hz:members>
                </hz:tcp-ip>
            </hz:join>
        </hz:network>
        <!-- Hazelcast Distributed Map configuration -->
        <hz:map name="map" backup-count="${hz.map.backup.count}" max-size="${hz.map.max.size}" eviction-percentage="${hz.map.eviction.percentage}"
            read-backup-data="${hz.map.read.backup.data}" eviction-policy="${hz.map.eviction.policy}" merge-policy="${hz.map.merge.policy}" />
    </hz:config>
</hz:hazelcast>

属性文件....

#-- Hazelcast properties.
hz.instance.name = myapp
hz.group.name = CERT
hz.group.password = cert
hz.management.center.enabled = true
hz.management.center.url = http://127.0.0.1:8080/mancenter
hz.network.port = 5701
hz.network.port.auto.increment = true
hz.multicast.enabled = true
hz.tcp.ip.enabled = false
hz.members = 127.0.0.1
hz.executor.service.core.pool.size = 2
hz.executor.service.max.pool.size = 30
hz.executor.service.keep.alive.seconds = 30
hz.map.backup.count=2
hz.map.max.size=0
hz.map.eviction.percentage=30
hz.map.read.backup.data=true
hz.map.cache.value=true
hz.map.eviction.policy=NONE
hz.map.merge.policy=hz.ADD_NEW_ENTRY

根上下文.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:hz="http://www.hazelcast.com/schema/spring"
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
    http://www.hazelcast.com/schema/spring
    http://www.hazelcast.com/schema/spring/hazelcast-spring-2.4.xsd">


...

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <jee:jndi-lookup jndi-name="java:comp/env/config_file" />
            </list>
        </property>
    </bean>

...

</beans>    

Tomcat 配置...

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
...

    <Context docBase="myapp" path="/myapp" reloadable="true"  source="org.eclipse.jst.j2ee.server:pwc-ws">
                    <Environment description="" name="config_file" override="false" type="java.lang.String" value="file:c:/path/to/config/myapp.properties" />
        </Context>
...

</Host>

Tomcat 输出(注意:这是一个两节点 hazelcast 组的重启场景。在这种情况下,节点 1 重新启动。节点 2 的输出显示节点 1 从组中删除,然后返回组)。

组 CERT 的节点 1

Nov 19, 2013 4:27:56 PM com.hazelcast.impl.AddressPicker
INFO: Prefer IPv4 stack is true.
Nov 19, 2013 4:27:56 PM com.hazelcast.impl.AddressPicker
INFO: Picked Address[10.23.43.13]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
Nov 19, 2013 4:27:57 PM com.hazelcast.system
INFO: [10.23.43.13]:5701 [CERT] Hazelcast Community Edition 2.4 (20121017) starting at Address[10.23.43.13]:5701
Nov 19, 2013 4:27:57 PM com.hazelcast.system
INFO: [10.23.43.13]:5701 [CERT] Copyright (C) 2008-2012 Hazelcast.com
Nov 19, 2013 4:27:57 PM com.hazelcast.impl.LifecycleServiceImpl
INFO: [10.23.43.13]:5701 [CERT] Address[10.23.43.13]:5701 is STARTING
Nov 19, 2013 4:27:57 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:57 PM com.hazelcast.impl.MulticastJoiner
INFO: [10.23.43.13]:5701 [CERT] Connecting to master node: Address[10.23.43.14]:5701
Nov 19, 2013 4:27:57 PM com.hazelcast.nio.ConnectionManager
INFO: [10.23.43.13]:5701 [CERT] 54106 accepted socket connection from /10.23.43.14:5701
Nov 19, 2013 4:27:57 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:57 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:58 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:58 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:59 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:27:59 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:00 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:00 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:01 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:01 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:02 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:02 PM com.hazelcast.impl.Node
INFO: [10.23.43.13]:5701 [CERT] ** setting master address to Address[10.23.43.14]:5701
Nov 19, 2013 4:28:02 PM com.hazelcast.cluster.ClusterManager
INFO: [10.23.43.13]:5701 [CERT]

Members [2] {
        Member [10.23.43.14]:5701
        Member [10.23.43.13]:5701 this
}

Nov 19, 2013 4:28:04 PM com.hazelcast.impl.LifecycleServiceImpl
INFO: [10.23.43.13]:5701 [CERT] Address[10.23.43.13]:5701 is STARTED
Nov 19, 2013 4:28:04 PM com.hazelcast.impl.management.ManagementCenterService
INFO: [10.23.43.13]:5701 [CERT] Hazelcast will connect to Management Center on address:     http://localhost:8080/mancenter/
Nov 19, 2013 4:28:04 PM com.hazelcast.config.UrlXmlConfig
INFO: Configuring Hazelcast from 'jndi:/localhost/pwc-ui/WEB-INF/classes/hazelcast.xml'.
Nov 19, 2013 4:28:04 PM com.hazelcast.web.WebFilter
INFO: sticky:true, debug: true, shutdown-on-destroy: true, map-name: my-sessions
Nov 19, 2013 4:28:05 PM org.apache.catalina.startup.HostConfig deployDescriptor

组 CERT 的节点 2(注意删除并重新添加)

Nov 19, 2013 4:27:11 PM com.hazelcast.nio.Connection
INFO: [10.23.43.14]:5701 [CERT] Connection [Address[10.23.43.13]:5701] lost. Reason: java.io.IOException[Connection reset by peer]
Nov 19, 2013 4:27:11 PM com.hazelcast.nio.ReadHandler
WARNING: [10.23.43.14]:5701 [CERT] hz.pwc.IO.thread-1 Closing socket to endpoint Address[10.23.43.13]:5701, Cause:java.io.IOException: Connection reset by peer
Nov 19, 2013 4:27:12 PM com.hazelcast.nio.SocketConnector
INFO: [10.23.43.14]:5701 [CERT] Could not connect to: /10.23.43.13:5701. Reason: ConnectException[Connection refused]
Nov 19, 2013 4:27:13 PM com.hazelcast.nio.SocketConnector
INFO: [10.23.43.14]:5701 [CERT] Could not connect to: /10.23.43.13:5701. Reason: ConnectException[Connection refused]
Nov 19, 2013 4:27:14 PM com.hazelcast.nio.SocketConnector
INFO: [10.23.43.14]:5701 [CERT] Could not connect to: /10.23.43.13:5701. Reason: ConnectException[Connection refused]
Nov 19, 2013 4:27:14 PM com.hazelcast.nio.ConnectionMonitor
WARNING: [10.23.43.14]:5701 [CERT] Removing connection to endpoint Address[10.23.43.13]:5701 Cause => java.net.ConnectException {Connection refused}, Error-Count: 5
Nov 19, 2013 4:27:14 PM com.hazelcast.cluster.ClusterManager
INFO: [10.23.43.14]:5701 [CERT] Removing Address Address[10.23.43.13]:5701
Nov 19, 2013 4:27:14 PM com.hazelcast.impl.PartitionManager
INFO: [10.23.43.14]:5701 [CERT] Starting to send partition replica diffs...true
Nov 19, 2013 4:27:14 PM com.hazelcast.cluster.ClusterManager
INFO: [10.23.43.14]:5701 [CERT]

Members [1] {
        Member [10.23.43.14]:5701 this
}

Nov 19, 2013 4:27:18 PM com.hazelcast.impl.PartitionManager
INFO: [10.23.43.14]:5701 [CERT] Total 0 partition replica diffs have been processed.
Nov 19, 2013 4:27:18 PM com.hazelcast.impl.PartitionManager
INFO: [10.23.43.14]:5701 [CERT] Re-partitioning cluster data... Immediate-Tasks: 0, Scheduled-Tasks: 0
Nov 19, 2013 4:27:57 PM com.hazelcast.nio.SocketAcceptor
INFO: [10.23.43.14]:5701 [CERT] 5701 is accepting socket connection from /10.23.43.13:54106
Nov 19, 2013 4:27:57 PM com.hazelcast.nio.ConnectionManager
INFO: [10.23.43.14]:5701 [CERT] 5701 accepted socket connection from /10.23.43.13:54106
Nov 19, 2013 4:27:57 PM com.hazelcast.web.WebFilter
INFO: Created new session with id: HZ650FDF62693F45A99AC0C30BBD8840B0
Nov 19, 2013 4:27:57 PM com.hazelcast.web.WebFilter
INFO: 195 is sessions.size and originalSessions.size: 195
Nov 19, 2013 4:27:57 PM com.hazelcast.web.WebFilter
INFO: PUTTING SESSION HZ650FDF62693F45A99AC0C30BBD8840B0
Nov 19, 2013 4:28:02 PM com.hazelcast.cluster.ClusterManager
INFO: [10.23.43.14]:5701 [CERT]

Members [2] {
        Member [10.23.43.14]:5701 this
        Member [10.23.43.13]:5701
}

Nov 19, 2013 4:28:02 PM com.hazelcast.impl.PartitionManager
INFO: [10.23.43.14]:5701 [CERT] Re-partitioning cluster data... Immediate-Tasks: 271, Scheduled-Tasks: 0
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: Created new session with id: HZAD50E5F483CC448C9FA7CB66D65848BB
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: 196 is sessions.size and originalSessions.size: 196
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: PUTTING SESSION HZAD50E5F483CC448C9FA7CB66D65848BB
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:24 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: Created new session with id: HZC9553A4C330044CA8A0C20549EE23BF0
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: 197 is sessions.size and originalSessions.size: 197
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: PUTTING SESSION HZC9553A4C330044CA8A0C20549EE23BF0
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
Nov 19, 2013 4:28:50 PM com.hazelcast.web.WebFilter
INFO: Request is instance of RequestWrapper! Continue...
10069.275: [GC [PSYoungGen: 693173K->3458K(695488K)] 877908K->188718K(2093632K), 0.0224650 secs] [Times: user=0.04 sys=0.00, real=0.02 secs]
Nov 19, 2013 4:29:18 PM com.hazelcast.web.WebFilter
INFO: Created new session with id: HZE46365454C2C45F98A7947AC40E404BB
Nov 19, 2013 4:29:18 PM com.hazelcast.web.WebFilter
INFO: 198 is sessions.size and originalSessions.size: 198
Nov 19, 2013 4:29:18 PM com.hazelcast.web.WebFilter
INFO: PUTTING SESSION HZE46365454C2C45F98A7947AC40E404BB
于 2013-11-12T16:23:18.663 回答
2

以下仅适用于 Hazelcast 3.2-SNAPSHOT。

让我们从会话复制和应用程序之间共享的单个 HazelcastInstance 开始。你可以这样做:

public class HazelcastInstanceLoader {

    private final static ILogger logger = Logger.getLogger(HazelcastInstanceLoader.class);

    public static HazelcastInstance load(String instanceName) throws Exception {
        String configName = System.getProperty("hazelcast.config");
        if (configName == null) {
            configName = "hazelcast.xml";
        }

        Config config;
        if (configName.startsWith("file:")) {
            String filename = configName.substring("file:".length());
            logger.info("Using hazelcast configuration file: " + filename);
            config = new FileSystemXmlConfig(filename);
        } else {
            logger.info("Using hazelcast classpath resource: " + configName);
            config = new ClasspathXmlConfig(configName);
        }
        config.setInstanceName(instanceName);
        return Hazelcast.getOrCreateHazelcastInstance(config);
    }
}

现在是 Spring 配置:

<bean id="hazelcastInstance"
      class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="com.hazelcast.webmonitor.HazelcastInstanceLoader.load"/>
    <property name="arguments">
        <list>
            <value>default</value>
        </list>
    </property>
</bean>

所以当它被加载时,我们有一个名为 HazelcastInstance 'default'。

当我像这样配置会话复制时:

<filter>
    <filter-name>hazelcast-filter</filter-name>
    <filter-class>com.hazelcast.web.WebFilter</filter-class>
    <init-param>
        <param-name>instance-name</param-name>
        <param-value>default</param-value>
    </init-param>
</filter>

然后会话过滤器将尝试加载具有该名称的 hazelcastinstance。由于加载了 Spring 应用程序上下文,因此已经创建了“默认”HazelcastInstance,因此会话过滤器将使用该实例而不创建新实例。

如果您需要完全独立的配置文件,只需使用“hazelcast.conf”系统属性指定一个文件(参见 HazelcastInstanceLoader 的代码)。除了依赖系统属性,您还可以修改 HazelcastInstanceLoader.load 方法以接受可以从 Spring 注入的“路径”属性。

为不同的环境设置不同的组是确保这些环境中的机器不形成组的有用方法。但是如果你想共享配置,并且只有细节上有区别(例如组名),那么你也可以在xml中使用变量:

<hazelcast>
    <group>
       <name>${groupname}</name>
       <password>${password}</password>
    </group>
    ...
 </hazelcast>

这回答了你的问题了吗?

于 2013-11-09T13:43:43.480 回答
0

你为什么不把每个环境的文件放在 src/main/resources 中。这样你就有了:dev.properties,qa.properties,prod.properties

使用环境变量,例如 ENV。在我的情况下,我把 ENV=dev 放在我的 spring-servlet.xml 中,我有:

<property name="locations">
    <list>
        <value>classpath:/${SERVER_ENV}.hazelcast.properties</value>
    </list>
</property>

然后在同一个文件中我以这种方式使用属性:

<hz:hazelcast id="myapp">
        <hz:config>
            <!-- Hazelcast Instance Name -->
            <hz:instance-name>${hz.instance.name}</hz:instance-name>
            <!-- Hazelcast Group Name and Password -->
            <hz:group name="${hz.group.name}" password="${hz.group.password}" />
            <!-- Hazelcast Management Center URL -->
            <hz:management-center enabled="${hz.management.center.enabled}" url="${hz.management.center.url}"
                />
            <!-- Hazelcast Tcp based network configuration -->
            <hz:network port="${hz.network.port}" port-auto-increment="${hz.network.port.auto.increment}">
                <hz:join>
                    <hz:multicast enabled="${hz.multicast.enabled}" multicast-group="224.2.2.3" multicast-port="54327"
                        />
                    <hz:tcp-ip enabled="${hz.tcp.ip.enabled}">
                        <hz:members>${hz.members}</hz:members>
                    </hz:tcp-ip>
                </hz:join>
            </hz:network>
            <!-- Hazelcast Distributed Map configuration -->
            <hz:map name="map" backup-count="${hz.map.backup.count}" max-size="${hz.map.max.size}"
                eviction-percentage="${hz.map.eviction.percentage}" read-backup-data="${hz.map.read.backup.data}"
                eviction-policy="${hz.map.eviction.policy}" merge-policy="${hz.map.merge.policy}"
                />
        </hz:config>
    </hz:hazelcast>
于 2014-08-06T09:42:21.600 回答