2016-04-06 9 views
1

Zur Zeit habe ich einen einfachen Krieg, der eine Feder Integrationskonfiguration hält, und dieser Krieg wird in einen Anlegesteg Container eingesetzt mit diesem Code:Dynamische Konfiguration Integration int-http Frühling: Inbound-Gateway

protected void createWac(File file, ConnectorConfig config) throws Exception, InterruptedException { 
    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar(file.getAbsolutePath()); 
    startServer(webapp, inboundConnector.getPort()); 
} 

unter dem Frühling Integration Config, ich habe einen int-http: Inbound-Gateway wie diese

<!-- 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> 

Mein Ziel, die Werte für myPath zu haben ist und die unterstützten-Methoden Werte dynamisch aufgebaut, der erste Ansatz, den ich ging, war Variablen zu haben, auf meiner XML-Datei, wie einige Leute auf diesen Beitrag vorschlagen: how to read System environment variable in Spring applicationContext

für, dass ich mit dieser Konfiguration versuchte

<!-- 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> 

und env auf meiner Maschine Einstellung, die seltsame Sache ist, dass, wenn ich diesen Satz, passiert nichts, noch einen Konfigurationsfehler, die Initialisierung des Kanals oder eine Eigenschaft nicht gefunden, ich weiß, denn wenn ich das Zeichen # entfernen, oder setze die tatsächliche uRL ich dies auf der Konsole:

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 

Alle Ideen, wie dieses Problem zu lösen, oder einen anderen Ansatz zu sein fähig, die Werte vorher in die Kontextdatei des Krieges zu injizieren es ist in den Steg Container entfaltet?

Antwort

1

Sie müssen auf die Environment Abstraction im Frühjahr einen Blick nehmen: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-environment

und einige Haken für Ihre Anwendung in Gesicht PropertySourcesPlaceholderConfigurer betrachten und sieht aus wie in Ihrem Fall für die ServletConfig:

Für eine allgemeine StandardServletEnvironment-Struktur sieht die vollständige Hierarchie folgendermaßen aus, wobei die Einträge mit der höchsten Priorität oben stehen: * ServletConfig-Parameter (falls zutreffend, z. B. im Falle eines DispatcherServlet-Kontexts) * ServletContext-Parameter (web.xml Kontextparametereinträge) * JNDI-Umgebungsvariablen (Einträge "java: comp/env /") * J VM Systemeigenschaften („-D“ Befehlszeilenargumente) * JVM-Systemumgebung (Betriebssystem Umgebungsvariablen)

Von anderer Seite betrachten zu Spring Boot zu migrieren.