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
依赖并使用 IgniteConfiguration
的 setGridLogger
方法覆盖默认记录器 - 此消息将消失。
【讨论】:
【参考方案2】:实际上,Ignite 在两种情况下都会启动一次(带有注释和未注释的 SpringApplication.run
行)。每个 Ignite 节点都会打印出当前的拓扑快照,但我在日志中只看到一行:
Topology snapshot [ver=14, servers=2, clients=0, CPUs=8, heap=3.7GB]
【讨论】:
以上是关于Apache Ignite 使用 Spring-Boot 加载两次?的主要内容,如果未能解决你的问题,请参考以下文章