Apache Ignite 使用 Spring-Boot 加载两次?

Posted

技术标签:

【中文标题】Apache Ignite 使用 Spring-Boot 加载两次?【英文标题】:Apache Ignite Loading Twice with Spring-Boot? 【发布时间】:2016-02-01 21:00:54 【问题描述】:

我正在使用 Spring-Boot 1.2.7.RELEASE 和 Apache Ignite 1.4.0 进行原型设计,发现有些奇怪,可能只是一个日志配置。

看起来 Apache Ignite 尝试使用 Spring 启动两次?如果我注释掉 SpringApplication.run 行,那么它看起来只启动一次。也许我没有正确使用 Spring 和 Apache Ignite?

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>IgniteDemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <ignite.version>1.4.0</ignite.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>$ignite.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring</artifactId>
            <version>$ignite.version</version>
        </dependency>       
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

IgniteDemoApplication

package com.example;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class IgniteDemoApplication 

    public static void main(String[] args) throws IgniteException 

        //
        // If I comment out this line then it only outputs one time.
        // But then how would I have access to my application context?
        // 
        SpringApplication.run(IgniteDemoApplication.class, args);


        try(Ignite ignite = Ignition.start("C:\\opt\\apache-ignite-fabric-1.4.0-bin\\examples\\config\\example-ignite.xml"))
            ignite.compute().broadcast(() -> System.out.println("Hello World!"));
        
    

输出

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.7.RELEASE)

2015-11-01 21:19:56.182  INFO 7024 --- [           main] com.example.IgniteDemoApplication        : Starting IgniteDemoApplication on User-PC with PID 7024 (C:\Users\User\Documents\workspace-sts-3.7.0.RELEASE\IgniteDemo\target\classes started by User in C:\Users\User\Documents\workspace-sts-3.7.0.RELEASE\IgniteDemo)
2015-11-01 21:19:56.223  INFO 7024 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@306279ee: startup date [Sun Nov 01 21:19:56 EST 2015]; root of context hierarchy
2015-11-01 21:19:56.963  INFO 7024 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2015-11-01 21:19:56.973  INFO 7024 --- [           main] com.example.IgniteDemoApplication        : Started IgniteDemoApplication in 0.981 seconds (JVM running for 1.505)
2015-11-01 21:19:57.044  INFO 7024 --- [           main] o.s.b.f.xml.XmlBeanDefinitionReader      : Loading XML bean definitions from URL [file:/C:/opt/apache-ignite-fabric-1.4.0-bin/examples/config/example-ignite.xml]
2015-11-01 21:19:57.164  INFO 7024 --- [           main] o.s.c.support.GenericApplicationContext  : Refreshing org.springframework.context.support.GenericApplicationContext@6f6745d6: startup date [Sun Nov 01 21:19:57 EST 2015]; root of context hierarchy
2015-11-01 21:19:57.264 ERROR 7024 --- [           main]                                          : Failed to resolve default logging config file: config/java.util.logging.properties
Console logging handler is not configured.
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : 

>>>    __________  ________________  
>>>   /  _/ ___/ |/ /  _/_  __/ __/  
>>>  _/ // (7 7    // /  / / / _/    
>>> /___/\___/_/|_/___/ /_/ /___/   
>>> 
>>> ver. 1.4.0#20150924-sha1:c2def5f6
>>> 2015 Copyright(C) Apache Software Foundation
>>> 
>>> Ignite documentation: http://ignite.apache.org

[21:19:57]    __________  ________________ 
[21:19:57]   /  _/ ___/ |/ /  _/_  __/ __/ 
[21:19:57]  _/ // (7 7    // /  / / / _/   
[21:19:57] /___/\___/_/|_/___/ /_/ /___/  
[21:19:57] 
[21:19:57] ver. 1.4.0#20150924-sha1:c2def5f6
[21:19:57] 2015 Copyright(C) Apache Software Foundation
[21:19:57] 
[21:19:57] Ignite documentation: http://ignite.apache.org
[21:19:57] 
[21:19:57] Quiet mode.
[21:19:57]   ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.sh|bat
[21:19:57] 
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Config URL: file:/C:/opt/apache-ignite-fabric-1.4.0-bin/examples/config/example-ignite.xml
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Daemon mode: off
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : OS: Windows 7 6.1 amd64
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : OS user: User
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Language runtime: Java Platform API Specification ver. 1.8
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : VM information: Java(TM) SE Runtime Environment 1.8.0_60-b27 Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.60-b23
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : VM total memory: 2.7GB
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Remote Management [restart: off, REST: on, JMX (remote: on, port: 31718, auth: off, ssl: off)]
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : IGNITE_HOME=null
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : VM arguments: [-Dcom.sun.management.jmxremote, -Dcom.sun.management.jmxremote.port=31718, -Dcom.sun.management.jmxremote.authenticate=false, -Dcom.sun.management.jmxremote.ssl=false, -Dspring.liveBeansView.mbeanDomain, -Dspring.application.admin.enabled=true, -Dfile.encoding=UTF-8]
2015-11-01 21:19:57.325  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Configured caches ['ignite-marshaller-sys-cache', 'ignite-sys-cache', 'ignite-atomics-sys-cache']
2015-11-01 21:19:57.325  WARN 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Peer class loading is enabled (disable it in production for performance and deployment consistency reasons)
2015-11-01 21:19:57.335  WARN 7024 --- [te-#4%pub-null%] o.apache.ignite.internal.GridDiagnostic  : Initial heap size is 192MB (should be no less than 512MB, use -Xms512m -Xmx512m).
[21:19:57] Initial heap size is 192MB (should be no less than 512MB, use -Xms512m -Xmx512m).
2015-11-01 21:19:58.601  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Non-loopback local IPs: 192.168.1.136, fe80:0:0:0:0:5efe:c0a8:188%net3, fe80:0:0:0:7942:8350:33cb:857e%eth3
2015-11-01 21:19:58.601  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Enabled local MACs: 00000000000000E0, 00248C37A502
[21:19:58] Configured plugins:
2015-11-01 21:19:58.601  INFO 7024 --- [           main] o.a.i.i.p.plugin.IgnitePluginProcessor   : Configured plugins:
[21:19:58]   ^-- None
2015-11-01 21:19:58.601  INFO 7024 --- [           main] o.a.i.i.p.plugin.IgnitePluginProcessor   :   ^-- None
[21:19:58] 
2015-11-01 21:19:58.601  INFO 7024 --- [           main] o.a.i.i.p.plugin.IgnitePluginProcessor   : 
2015-11-01 21:19:58.802  INFO 7024 --- [           main] o.a.i.s.c.tcp.TcpCommunicationSpi        : Successfully bound to TCP port [port=47101, locHost=0.0.0.0/0.0.0.0]
2015-11-01 21:19:59.872  WARN 7024 --- [           main] o.a.i.s.c.noop.NoopCheckpointSpi         : Checkpoints are disabled (to enable configure any GridCheckpointSpi implementation)
2015-11-01 21:19:59.913  WARN 7024 --- [           main] o.a.i.i.m.c.GridCollisionManager         : Collision resolution is disabled (all jobs will be activated upon arrival).
2015-11-01 21:19:59.913  WARN 7024 --- [           main] o.a.i.s.swapspace.noop.NoopSwapSpaceSpi  : Swap space is disabled. To enable use FileSwapSpaceSpi.
[21:19:59] Security status [authentication=off, communication encryption=off]
2015-11-01 21:19:59.913  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Security status [authentication=off, communication encryption=off]
2015-11-01 21:20:00.083  INFO 7024 --- [           main] o.a.i.i.p.r.p.tcp.GridTcpRestProtocol    : Command protocol successfully started [name=TCP binary, host=0.0.0.0/0.0.0.0, port=11212]
2015-11-01 21:20:00.133  INFO 7024 --- [           main] o.a.i.spi.discovery.tcp.TcpDiscoverySpi  : Successfully bound to TCP port [port=47501, localHost=0.0.0.0/0.0.0.0]
2015-11-01 21:20:03.071  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Started cache [name=ignite-sys-cache, mode=REPLICATED]
2015-11-01 21:20:03.084  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Started cache [name=ignite-atomics-sys-cache, mode=PARTITIONED]
2015-11-01 21:20:03.098  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Started cache [name=ignite-marshaller-sys-cache, mode=REPLICATED]
2015-11-01 21:20:03.224  INFO 7024 --- [           main] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-sys-cache> Starting rebalancing in SYNC mode: ignite-sys-cache
2015-11-01 21:20:03.225  INFO 7024 --- [           main] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-atomics-sys-cache> Starting rebalancing in SYNC mode: ignite-atomics-sys-cache
2015-11-01 21:20:03.225  INFO 7024 --- [           main] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-marshaller-sys-cache> Starting rebalancing in SYNC mode: ignite-marshaller-sys-cache
2015-11-01 21:20:03.281  INFO 7024 --- [orker-#58%null%] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-marshaller-sys-cache> Completed rebalancing in SYNC mode [cache=ignite-marshaller-sys-cache, time=50 ms]
2015-11-01 21:20:03.290  INFO 7024 --- [orker-#51%null%] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-sys-cache> Completed rebalancing in SYNC mode [cache=ignite-sys-cache, time=70 ms]
2015-11-01 21:20:03.302  INFO 7024 --- [orker-#55%null%] o.a.i.i.p.c.d.d.p.GridDhtPreloader       : <ignite-atomics-sys-cache> Completed rebalancing in SYNC mode [cache=ignite-atomics-sys-cache, time=70 ms]
[21:20:03] Performance suggestions for grid  (fix if possible)
2015-11-01 21:20:03.349  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : Performance suggestions for grid  (fix if possible)
[21:20:03] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
2015-11-01 21:20:03.349  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
[21:20:03]   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
2015-11-01 21:20:03.349  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  :   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
[21:20:03]   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
2015-11-01 21:20:03.349  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  :   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
[21:20:03] 
2015-11-01 21:20:03.349  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : 
[21:20:03] To start Console Management & Monitoring run ignitevisorcmd.sh|bat
2015-11-01 21:20:03.350  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : To start Console Management & Monitoring run ignitevisorcmd.sh|bat
[21:20:03] 
[21:20:03] Ignite node started OK (id=a4028962)
2015-11-01 21:20:03.350  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : 
2015-11-01 21:20:03.351  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : 

>>> +----------------------------------------------------------------------+
>>> Ignite ver. 1.4.0#20150924-sha1:c2def5f647e410e9f25383d3e74f393e4d1348a5
>>> +----------------------------------------------------------------------+
>>> OS name: Windows 7 6.1 amd64
>>> CPU(s): 8
>>> Heap: 2.7GB
>>> VM name: 7024@User-PC
>>> Grid name: null
>>> Local node [ID=A4028962-807E-4011-BA64-B923B57DD8EA, order=14, clientMode=false]
>>> Local node addresses: [User-PC.cable.rcn.com/0:0:0:0:0:0:0:1, /127.0.0.1, /192.168.1.136]
>>> Local ports: TCP:11212 TCP:47101 UDP:47400 TCP:47501 

[21:20:03] Topology snapshot [ver=14, servers=2, clients=0, CPUs=8, heap=3.7GB]
2015-11-01 21:20:03.352  INFO 7024 --- [           main] o.a.i.i.m.d.GridDiscoveryManager         : Topology snapshot [ver=14, servers=2, clients=0, CPUs=8, heap=3.7GB]
2015-11-01 21:20:03.359  INFO 7024 --- [           main] o.a.i.i.m.d.GridDeploymentLocalStore     : Class locally deployed: class com.example.IgniteDemoApplication
Hello World!
2015-11-01 21:20:03.442  INFO 7024 --- [           main] o.a.i.i.p.r.p.tcp.GridTcpRestProtocol    : Command protocol successfully stopped: TCP binary
2015-11-01 21:20:03.459  WARN 7024 --- [-reader-#9%null] o.a.i.spi.discovery.tcp.TcpDiscoverySpi  : Unknown connection detected (is some other software connecting to this Ignite port? missing SSL configuration on remote node?) [rmtAddr=/0:0:0:0:0:0:0:1]
[21:20:03] Unknown connection detected (is some other software connecting to this Ignite port? missing SSL configuration on remote node?) [rmtAddr=/0:0:0:0:0:0:0:1]
2015-11-01 21:20:03.466  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Stopped cache: ignite-marshaller-sys-cache
2015-11-01 21:20:03.472  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Stopped cache: ignite-sys-cache
2015-11-01 21:20:03.473  INFO 7024 --- [           main] o.a.i.i.p.cache.GridCacheProcessor       : Stopped cache: ignite-atomics-sys-cache
2015-11-01 21:20:03.475  INFO 7024 --- [           main] o.a.i.i.m.d.GridDeploymentLocalStore     : Removed undeployed class: GridDeployment [ts=1446430803215, depMode=SHARED, clsLdr=sun.misc.Launcher$AppClassLoader@18b4aac2, clsLdrId=ab87ef5c051-a4028962-807e-4011-ba64-b923b57dd8ea, userVer=0, loc=true, sampleClsName=org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap, pendingUndeploy=false, undeployed=true, usage=0]
[21:20:03] Ignite node stopped OK [uptime=00:00:00:132]
2015-11-01 21:20:03.482  INFO 7024 --- [           main] org.apache.ignite.internal.IgniteKernal  : 

>>> +---------------------------------------------------------------------------------+
>>> Ignite ver. 1.4.0#20150924-sha1:c2def5f647e410e9f25383d3e74f393e4d1348a5 stopped OK
>>> +---------------------------------------------------------------------------------+
>>> Grid name: null
>>> Grid uptime: 00:00:00:132


2015-11-01 21:20:03.600  INFO 7024 --- [       Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@306279ee: startup date [Sun Nov 01 21:19:56 EST 2015]; root of context hierarchy
2015-11-01 21:20:03.601  INFO 7024 --- [       Thread-1] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown

【问题讨论】:

【参考方案1】:

这不是“两个实例”,而是 Ignite 记录启动横幅的两种方式 - 一种使用 STDOUT,另一种使用内置记录器。

只需添加 ignite-slf4j 依赖并使用 IgniteConfigurationsetGridLogger 方法覆盖默认记录器 - 此消息将消失。

【讨论】:

【参考方案2】:

实际上,Ignite 在两种情况下都会启动一次(带有注释和未注释的 SpringApplication.run 行)。每个 Ignite 节点都会打印出当前的拓扑快照,但我在日志中只看到一行:

Topology snapshot [ver=14, servers=2, clients=0, CPUs=8, heap=3.7GB]

【讨论】:

以上是关于Apache Ignite 使用 Spring-Boot 加载两次?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Ignite 学习

apache ignite系列: 简介

Apache Spark + Ignite 集群瘦客户端

在命令行上运行 Apache Ignite 时创建 Ignite 组件失败

无法在Apache Ignite中加载类名属性

Apache Ignite 改装 -- 服务异步化支持