动态配置spring的集成int-http:inbound-gateway

时间:2016-04-06 22:56:58

标签: java spring jetty spring-integration

目前我有一个简单的战争,它拥有一些弹簧集成配置,并且使用此代码将此战争部署到一个Jetty容器中:

protected void createWac(File file, ConnectorConfig config) throws Exception, InterruptedException {
    WebAppContext webapp = new WebAppContext();
    webapp.setContextPath("/");
    webapp.setWar(file.getAbsolutePath());
    startServer(webapp, inboundConnector.getPort());
}
在Spring Integration配置中,我有一个像这样的int-http:inbound-gateway

<!-- External listener definition -->
<int-http:inbound-gateway id="entryHttpInboundGateway"
    request-channel="myRequestChannel"
    path="myPath" 
    reply-channel="myReplyChannel"
    request-payload-type="com.me.MyType"
    supported-methods="POST" message-converters="converters"
    reply-timeout="1000">
</int-http:inbound-gateway>

我的目标是动态设置myPath和supported-methods值的值,我采用的第一种方法是在我的xml文件中包含变量,正如有些人在这篇文章中建议的那样:how to read System environment variable in Spring applicationContext

为此我尝试使用此配置

<!-- External listener definition -->
<int-http:inbound-gateway id="entryHttpInboundGateway"
    request-channel="myRequestChannel"
    path="#{ systemProperties['HTTP_PATH'] }" 
    reply-channel="myReplyChannel"
    request-payload-type="com.me.MyType"
    supported-methods="POST" message-converters="converters"
    reply-timeout="1000">
</int-http:inbound-gateway>

并在我的机器上设置env,奇怪的是当我设置它时,没有任何反应,也没有配置错误,通道的初始化或找不到的属性,我知道,因为如果我删除了#签名,或者把实际的网址放在控制台上:

IntegrationRequestMappingHandlerMapping - Mapped "{[/{ systemProperties['HTTP_PATH'] }],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public abstract void org.springframework.web.HttpRequestHandler.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException

关于如何解决这个问题的任何想法,或者在将值放入jetty容器之前能够将值注入war的上下文文件的其他方法?

1 个答案:

答案 0 :(得分:1)

你必须看看春天的Environment Abstractionhttp://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-environment

考虑一下PropertySourcesPlaceholderConfigurer面向你的应用程序的一些问题,看起来就像ServletConfig的情况一样:

  

对于常见的StandardServletEnvironment,完整层次结构如下所示,顶部的最高优先级条目:* ServletConfig参数(如果适用,例如在DispatcherServlet上下文的情况下)* ServletContext参数(web.xml context-param)条目)* JNDI环境变量(&#34; java:comp / env /&#34;条目)* JVM系统属性(&#34; -D&#34;命令行参数)* JVM系统环境(操作系统环境)变量)

从另一方面考虑迁移到Spring Boot