
- Hazelcast 教程
- Hazelcast - 首页
- Hazelcast - 简介
- Hazelcast - 设置
- Hazelcast - 第一个应用程序
- Hazelcast - 配置
- 设置多节点实例
- Hazelcast - 数据结构
- Hazelcast - 客户端
- Hazelcast - 序列化
- Hazelcast 高级特性
- Hazelcast - Spring 集成
- Hazelcast - 监控
- Map Reduce & 聚合
- Hazelcast - 集合监听器
- 常见问题 & 性能提示
- Hazelcast 有用资源
- Hazelcast - 快速指南
- Hazelcast - 有用资源
- Hazelcast - 讨论
Hazelcast - 配置
Hazelcast 支持基于编程的和基于 XML 的配置。然而,鉴于其易用性,XML 配置在生产环境中被大量使用。但 XML 配置内部使用编程配置。
XML 配置
这些配置需要放置在 hazelcast.xml 文件中。该文件会在以下位置(按顺序)搜索,并从第一个可用位置选择:
通过系统属性将 XML 的位置传递给 JVM - Dhazelcast.config=/path/to/hazelcast.xml
当前工作目录中的 hazelcast.xml
类路径中的 hazelcast.xml
Hazelcast 提供的默认 hazelcast.xml
找到 XML 后,Hazelcast 将从 XML 文件加载所需的配置。
让我们用一个例子来尝试一下。在您的当前目录中创建一个名为 hazelcast.xml 的 XML 文件。
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- name of the instance --> <instance-name>XML_Hazelcast_Instance</instance-name> </hazelcast>
目前,此 XML 文件只包含用于验证的 Hazelcast XML 架构位置。但更重要的是,它包含实例名称。
示例
现在创建一个 XMLConfigLoadExample.java 文件,内容如下。
package com.example.demo; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; public class XMLConfigLoadExample { public static void main(String... args) throws InterruptedException{ //initialize hazelcast server/instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); //specified the name written in the XML file System.out.println(String.format("Name of the instance: %s",hazelcast.getName())); //perform a graceful shutdown hazelcast.shutdown(); } }
使用以下命令执行上述 Java 文件:
java -Dhazelcast.config=hazelcast.xml -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.XMLConfigLoadExample
输出
上述命令的输出将是:
Jan 30, 2021 1:21:41 PM com.hazelcast.config.XmlConfigLocator INFO: Loading configuration hazelcast.xml from System property 'hazelcast.config' Jan 30, 2021 1:21:41 PM com.hazelcast.config.XmlConfigLocator INFO: Using configuration file at C:\Users\demo\eclipseworkspace\ hazelcast\hazelcast.xml ... Members {size:1, ver:1} [ Member [localhost]:5701 - 3d400aed-ddb9-4e59-9429-3ab7773e7e09 this ] Name of cluster: XML_Hazelcast_Instance
如您所见,Hazelcast 加载了配置并打印了在配置中指定的名称(最后一行)。
XML 中可以指定许多配置选项。完整的列表可以在以下位置找到:
在接下来的教程中,我们将了解其中一些配置。
编程配置
如前所述,XML 配置最终是通过编程配置完成的。因此,让我们尝试对我们在 XML 配置中看到的相同示例进行编程配置。为此,让我们创建一个 ProgramaticConfigLoadExample.java 文件,内容如下。
示例
package com.example.demo; import com.hazelcast.config.Config; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; public class ProgramaticConfigLoadExample { public static void main(String... args) throws InterruptedException { Config config = new Config(); config.setInstanceName("Programtic_Hazelcast_Instance"); // initialize hazelcast server/instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(config); // specified the name written in the XML file System.out.println(String.format("Name of the instance: %s", hazelcast.getName())); // perform a graceful shutdown hazelcast.shutdown(); } }
让我们通过以下方式执行代码,不传递任何 hazelcast.xml 文件:
java -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.ProgramaticConfigLoadExample
输出
上述代码的输出是:
Name of the instance: Programtic_Hazelcast_Instance
日志记录
为了避免依赖关系,Hazelcast 默认使用基于 JDK 的日志记录。但它也支持通过slf4j、log4j进行日志记录。例如,如果我们想通过 sl4j 和 logback 设置日志记录,我们可以更新 POM 以包含以下依赖项:
<!-- contains both sl4j bindings and the logback core --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
示例
定义一个名为 logback.xml 的配置文件,并将其添加到类路径中,例如 src/main/resources。
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> <logger name="com.hazelcast" level="error"> <appender-ref ref="STDOUT" /> </logger> </configuration>
现在,当我们执行以下命令时,我们会注意到有关 Hazelcast 成员创建等的元信息没有打印。这是因为我们将 Hazelcast 的日志级别设置为错误,并要求 Hazelcast 使用 sl4j 记录器。
java -Dhazelcast.logging.type=slf4j -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.SingleInstanceHazelcastExample
输出
John
变量
写入 XML 配置文件的值可能因环境而异。例如,在生产环境中,与开发环境相比,您可能使用不同的用户名/密码连接到 Hazelcast 集群。无需维护单独的 XML 文件,也可以在 XML 文件中编写变量,然后通过命令行或编程方式将这些变量传递给 Hazelcast。这是一个从命令行选择实例名称的示例。
所以,这是我们带有变量 ${varname} 的 XML 文件
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.12.12.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <instance-name>${instance_name}</instance-name> </hazelcast>
示例
这是我们将用来打印变量值的示例 Java 代码:
package com.example.demo; import java.util.Map; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; public class XMLConfigLoadWithVariable { public static void main(String... args) throws InterruptedException { // initialize hazelcast server/instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); // specified the name written in the XML file System.out.println(String.format("Name of the instance: %s", hazelcast.getName())); // perform a graceful shutdown hazelcast.shutdown(); } }
命令如下:
java -Dhazelcast.config=others\hazelcast.xml -Dinstance_name=dev_cluster -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.XMLConfigLoadWithVariable
输出
输出显示 Hazelcast 正确地替换了变量。
Name of the instance: dev_cluster