我的应用程序正在使用Spring&Solace。我们正在使用以下xml配置文件来连接队列:
<bean id="solaceJndiTemplate" class="org.springframework.jndi.JndiTemplate"
lazy-init="default" autowire="default">
<property name="environment">
<map>
<entry key="java.naming.provider.url" value="${sol.url}:${sol.port}" />
<entry key="java.naming.factory.initial"
value="com.solacesystems.jndi.SolJNDIInitialContextFactory" />
<entry key="java.naming.security.principal" value="${sol.principal}" />
<entry key="java.naming.security.credentials" value="${sol.credential}" />
<entry key="Solace_JMS_VPN" value="${sol.vpn}" />
</map>
</property>
</bean>
<bean id="solaceConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="default" autowire="default">
<property name="jndiTemplate" ref="solaceJndiTemplate" />
<property name="jndiName" value="${sol.connectionFactory}" />
</bean>
<bean id="solaceCachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="solaceConnectionFactory" />
<property name="reconnectOnException" value="true" />
<property name="sessionCacheSize" value="10" />
</bean>
到目前为止,这一切都很好。
现在,我的要求是将其转换为Spring Boot。这样做的同时,我无法设置“ targetConnectionFactory ”。下面是我的代码:
@Bean(name = "solaceJndiTemplate")
public JndiTemplate solaceJndiTemplate() {
JndiTemplate jndiTemplate = new JndiTemplate();
Properties environment = new Properties();
environment.put("java.naming.provider.url", solUrl + ":" + solPort);
environment.put("java.naming.factory.initial", "com.solacesystems.jndi.SolJNDIInitialContextFactory");
environment.put("java.naming.security.principal", solPrincipal);
environment.put("java.naming.security.credentials", solCredential);
environment.put("Solace_JMS_VPN", solVpn);
jndiTemplate.setEnvironment(environment);
return jndiTemplate;
}
@Bean(name = "solaceConnectionFactory")
@Primary
public JndiObjectFactoryBean solaceConnectionFactory() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(solaceJndiTemplate());
jndiObjectFactoryBean.setJndiName(solConnectionFactory);
return jndiObjectFactoryBean.;
}
@Bean(name = "solaceCachedConnectionFactory")
public CachingConnectionFactory solaceCachedConnectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
**cachingConnectionFactory.setTargetConnectionFactory(solaceConnectionFactory());**
cachingConnectionFactory.setReconnectOnException(true);
cachingConnectionFactory.setSessionCacheSize(10);
return cachingConnectionFactory;
}
错误是:无法将SingleConnectionfactory中的setTargetConnectionFactory(javax.jms.Connectionfactory)应用于or.sprinfaremwork.jndi.JndiObjectFactoryBean。
IDE的建议:考虑强制转换为javax.jms.Connectionfactory。
我担心的是,基于xml的常规配置能够自动设置它并正常工作。我只是试图按照Spring Boot(使用1.5.12版本)的建议创建bean,并抛出错误。
观察: CachingConnectionFactory 在spring-jms:4.3.16中,而 JndiObjectFactoryBean 在spring-context:4.3.16中被使用在 Spring引导和基于Xml的中。
有人可以建议,我该怎么实现。
谢谢。