【发布时间】:2018-11-04 03:22:15
【问题描述】:
我们正在从 2.3 升级到 2.4,并意识到在其 javadoc 中添加的这一行中引用的 IgniteSpringBean 中所做的更改导致我们将 PostConstruct 中的大量引用移动到 handleContextRefresh。
但是,这会破坏根据那里的建议配置的 spring 事务配置,我不确定如何解决。基本上,我们在 spring 应用程序 xml 中有以下内容,其中配置了 IgniteSpringBean 和 SpringTransactionManager,它们在 2.3 中工作,但无法使用 2.4 开始引用上述更改(当我的机器突然停机时,我将添加一点异常),
<bean id="igniteSpringBean" class="org.apache.ignite.IgniteSpringBean">
<property name="configuration">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ObjectManagerGrid"/>
<property name="clientMode" value="true"/>
...
...
</bean>
</property>
</bean>
<!-- Enable Spring transaction abstraction for Ignite transactions -->
<bean id="transactionManager" class="org.apache.ignite.transactions.spring.SpringTransactionManager">
<property name="igniteInstanceName" value="ObjectManagerGrid"/>
<property name="transactionConcurrency" value="PESSIMISTIC"/>
</bean>
<!-- Enable annotation-driven transaction configuration/demarcation -->
<tx:annotation-driven/>
关于如何解决这个问题的任何线索?
谢谢!
更新:以下是例外,
ignite-object-manager - [错误] 2018-05-24 18:36:45.133 [main] org.springframework.boot.SpringApplication - 应用程序启动失败 org.springframework.beans.factory.BeanCreationException:在类路径资源 [applicationContext.xml] 中定义名称为“transactionManager”的 bean 创建错误:调用 init 方法失败;嵌套异常是类 org.apache.ignite.IgniteIllegalStateException:具有提供名称的 Ignite 实例不存在。您是否调用 Ignition.start(..) 来启动 Ignite 实例? [名称=ObjectManagerGrid] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 在 com.brocade.dcm.Application.main(Application.java:63) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.boot.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) 原因:org.apache.ignite.IgniteIllegalStateException:具有提供名称的 Ignite 实例不存在。您是否调用 Ignition.start(..) 来启动 Ignite 实例? [名称=ObjectManagerGrid] 在 org.apache.ignite.internal.IgnitionEx.grid(IgnitionEx.java:1376) 在 org.apache.ignite.Ignition.ignite(Ignition.java:530) 在 org.apache.ignite.transactions.spring.SpringTransactionManager.afterPropertiesSet(SpringTransactionManager.java:357) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ...省略了22个常用框架
【问题讨论】:
-
我可以做的一件事是将 SpringTransactionManager bean 实例创建移动到 @Bean 方法中,一旦我拿回我的机器,我将测试这样做......但我希望我没有必须改变任何东西..
-
移动到 @Bean 方法也不起作用,在启动时低于异常,...... 引起:org.apache.ignite.IgniteIllegalStateException:Ignite instance with provided name doesn't存在。您是否调用 Ignition.start(..) 来启动 Ignite 实例? [name=ObjectManagerGrid] 在 org.apache.ignite.Ignition.ignite(Ignition.java:530) 在 org.apache.ignite.transactions 的 org.apache.ignite.internal.IgnitionEx.grid(IgnitionEx.java:1376)。 spring.SpringTransactionManager.afterPropertiesSet(SpringTransactionManager.java:357)
标签: spring spring-boot spring-data ignite gridgain