我有一个spring-boot项目,使用jms在Queue中发布消息并使用Apache ActiveMq进行监听 .

使用外部tomcat服务器时,以下条目在tomcat配置文件中生成,并且接收JMS消息 .

<Resource name="jms/myQCF" 
 auth="Container" 
 type="org.apache.activemq.ActiveMQConnectionFactory" 
 description="JMS Connection Factory"
 factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
 brokerURL="tcp://localhost:61616" 
 brokerName="LocalActiveMQBroker"/>

<Resource name="jms/myAPIQueue" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" 
 description="pubTomyAPIQueue" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="API.QUEUE"/>

使用嵌入式tomcat容器时,在spring boot主类中进行如下配置

@SpringBootApplication public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatFactory() {
        return new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                    Tomcat tomcat) {
                tomcat.enableNaming();
                return super.getTomcatEmbeddedServletContainer(tomcat);
            }

            @Override
            protected void postProcessContext(Context context) {
                ContextResource resource = new ContextResource();
                resource.setName("jms/myQCF");
                resource.setType("org.apache.activemq.jndi.ActiveMQInitialContextFactory");
                resource.setProperty("factory", "org.apache.activemq.jndi.JNDIReferenceFactory");
                resource.setProperty("brokerName","LocalActiveMQBroker");
                resource.setAuth("Container");

                context.getNamingResources().addResource(resource);

                resource.setName("jms/myAPIQueue");
                resource.setType("org.apache.activemq.command.ActiveMQQueue");
                resource.setProperty("factory", "org.apache.activemq.jndi.JNDIReferenceFactory");
                resource.setAuth("Container");

                context.getNamingResources().addResource(resource);
            }
        };
        @Bean(destroyMethod="")
    public JndiTemplate jndiTemplate() {
        JndiTemplate jndiTemplate = new JndiTemplate();
        Properties properties = new Properties();
        properties.setProperty("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        properties.setProperty("java.naming.provider.url", "vm://localhost?broker.persistent=false");
        jndiTemplate.setEnvironment(properties);
        return jndiTemplate;

    }

    @Bean(destroyMethod="")
    public ConnectionFactory jmsConnectionFactory() throws IllegalArgumentException, NamingException {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("java:comp/env/jms/myQCF");
        jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
        jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
        jndiObjectFactoryBean.setLookupOnStartup(false);
        jndiObjectFactoryBean.afterPropertiesSet();
        return (ConnectionFactory)jndiObjectFactoryBean.getObject();
    }


    @Bean(destroyMethod="")
    public JndiObjectFactoryBean queueForPep() throws IllegalArgumentException, NamingException {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("java:comp/env/jms/myAPIQueue");
        jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
        jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
        jndiObjectFactoryBean.setLookupOnStartup(false);
        jndiObjectFactoryBean.afterPropertiesSet();
        return jndiObjectFactoryBean;
    }

    }

消息失败javax.xml.ws.WebServiceException:javax.naming.NamingException:scheme java无法识别

有没有配置?