SpringBoot中的Solace配置

时间:2018-10-16 09:03:01

标签: spring spring-boot

我的应用程序正在使用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的中。

有人可以建议,我该怎么实现。

谢谢。

0 个答案:

没有答案