我看到,在IgniteSpringBean中2.4中引入了一个更改以延迟点燃实例启动,直到所有其他spring bean初始化可能已经破坏Ignite SpringTransactionManager导致无法为Ignite事务的Spring事务抽象配置它 . 我真的非常需要找到解决这个问题的方法 . 任何想法/建议任何人?
下面是来自IgniteSpringBean java doc的行“在初始化所有其他Spring bean之后以及刷新Spring上下文之前启动Ignite实例 . 这意味着从任何类型的Spring bean init方法(如PostConstruct)引用IgniteSpringBean是无效的 . 它需要引用IgniteSpringBean用于其他bean初始化目的,它应该从该bean中声明的ContextRefreshedEvent侦听器方法完成 . “
problem is 自SpringTransactionManager实现了org.springframework.beans.factory.InitializingBean& in the afterPropertiesSet() call that spring calls it tries to look for the igniteInstanceName that's specified but since the instance is started only AFTER 所有其他Spring bean都已初始化, it fails with IgniteIllegalStateException ,
请看下面的堆栈跟踪,
lass]:调用init方法失败;嵌套异常是类org.apache.ignite.IgniteIllegalStateException:不存在具有提供名称的Ignite实例 . 你有没有调用Ignition.start(..)来启动一个Ignite实例?位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)的[name = ObjectManagerGrid] . springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java) :197)org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFac) tory.java:761)atg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)位于org.springframework.boot上的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) .context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)位于org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)的org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)位于sun.reflect的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的com.brocade.dcm.Application.main(Application.java:63) . NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)位于org.springframework.bo的java.lang.reflect.Method.invoke(Method.java:498)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ot.loader.MainMethodRunner.run(MainMethodRunner.java:48)org.springframework.boot.loader.Launcher.launch(Launcher.java:87)org.springframework.boot.loader.Launcher.launch(Launcher.java: 50)在org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) Caused by: org.apache.ignite.IgniteIllegalStateException: Ignite instance with provided name doesn't exist. Did you call Ignition.start(..) to start an Ignite instance? [name=ObjectManagerGrid] at org.apache.ignite.internal.IgnitionEx.grid(IgnitionEx.java:1376) at org.apache.ignite.Ignition.ignite(Ignition.java:530) at org.apache.ignite.transactions.spring.SpringTransactionManager.afterPropertiesSet(SpringTransactionManager.java:357) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ...省略了22个常用帧
谢谢
1 回答
对于面临此问题的其他人,正如Dennis(@dmagda)评论的那样,已经使用此票证修复了https://issues.apache.org/jira/browse/IGNITE-8740并将在2.6中提供 .
同时我所做的就是在配置bean(@Configuration)中以这种方式破解注入,