0

我在我的 spring 上下文中使用了 ignoreUnresolvablePlaceholders。如下。

<bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:messaging.properties</value>
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="false" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>

事件设置 ignoreUnresolvablePlaceholders 为 true 它不会忽略我正在注入的 spring bean。我在属性文件中传递 amq.topic=

<bean id="messageTopic1" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="${amq.topic}" />
</bean>

但它并没有因为注入而忽略这个 bean。

下面是我的 Spring-context.xml amd 属性文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:messaging.properties</value>
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="false" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>


    <!-- Active MQ Broker Configuration Details -->

    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="${amq.url}" />
    </bean>

    <bean id="messageQueue1" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="${amq.queue}" />
    </bean>

    <bean id="messageTopic1" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="${amq.topic}" />
    </bean>

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

    <bean id="activeMQ" class="com.isc.common.messaging.AmqUtilityHelper">
        <property name="destination" ref="messageQueue1" />
        <property name="jmsTemplate" ref="jmsTemplate" />
    </bean>

    <!-- <bean id="activeMQ1" class="com.isc.common.messaging.AmqUtilityHelper">
        <property name="destination" ref="messageTopic1" />
        <property name="jmsTemplate" ref="jmsTemplate" />
    </bean> -->

    <bean id="messageBroker" class="com.isc.common.messaging.AmqUtilityHelper">
        <property name="activeBroker" value="${active.broker}" />
    </bean>

</beans>

下面是我正在加载的属性文件。

#AMQ/Solace properties production:
# uncomment the borker to use
active.broker=activeMQ
#active.broker=solace
#active.broker=activeMQ



#AMQ Broker Properties
amq.url=failover:(tcp://localhost:61616)??initialReconnectDelay=2000&maxReconnectAttempts=5
amq.queue=messageQueue1
amq.topic=


#Solace Broker Properties
solace.url=smf://192.168.56.101:55555
solace.userName=spring_user@Solace_Spring_VPN
solace.passWord=spring_password
solace.jndiName=JNDI/CF/spring1
solace.queue=JNDI/Q/requests
#solace.topic=JNDI/topic1
4

1 回答 1

0

默认情况下,作为初始化过程的一部分,ApplicationContext 实现会急切地创建和配置所有单例 bean。通常,这种预实例化是可取的,因为配置或周围环境中的错误会立即发现,而不是几小时甚至几天之后。当这种行为不可取时,您可以通过将 bean 定义标记为惰性初始化来防止单例 bean 的预实例化。延迟初始化的 bean 告诉 IoC 容器在第一次被请求时创建一个 bean 实例,而不是在启动时。

您能否尝试使用以下构造延迟初始化您的 bean。

懒惰初始化=“真”

   <bean id="messageTopic1" class="org.apache.activemq.command.ActiveMQTopic" 
  lazy-init="true">
            <constructor-arg value="${amq.topic}" />
    </bean>
于 2018-06-21T11:03:40.093 回答