2017-04-05 2 views
0

in meiner Anwendung gibt es unterschiedliche Federprofile: Entwicklung, Test, ...Register unterschiedliche Strömungen abhängig von Feder Profil

Die Frage ist, gibt es eine Möglichkeit, einen Fluss in Abhängigkeit von der Aktivierung registrieren Federprofil?

Zum Beispiel habe ich die Flüsse: aFlow.xml, bFlow.xml.

Wenn Federprofilentwicklung aktiviert ist, möchte ich so etwas wie

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
    <webflow:flow-location path=".../aFlow.xml" /> 
</webflow:flow-registry> 

und wenn Federprofiltest aktiviert ist, dann will ich so etwas wie

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
    <webflow:flow-location path=".../aFlow.xml" /> 
    <webflow:flow-location path=".../bFlow.xml" /> 
</webflow:flow-registry> 

Hintergrund: Wenn die Federprofilentwicklung ist aktiviert ist, ist die bFlow.xml möglicherweise nicht zugänglich. Wenn der Federprofiltest aktiviert ist, sollten aFlow.xml und bFlow.xml zugänglich sein.

Derzeit habe ich die folgende Lösung. Ich definiere

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
    <webflow:flow-location path=".../aFlow.xml" /> 
</webflow:flow-registry> 

<webflow:flow-registry id="flowRegistryTest" flow-builder-services="flowBuilderServices" parent="flowRegistry"> 
    <webflow:flow-location path=".../bFlow.xml" /> 
</webflow:flow-registry> 

und verschiedene FlowHandlerMapping zur Verwendung auf dem Federprofil abhängig:

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> 
    <property name="flowRegistry" ref="flowRegistry"/> 
    <property name="defaultHandler"> 
     <!-- If no flow match, map path to a view to render; e.g. the "/intro" path would map to the view named 
      "intro" --> 
     <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> 
    </property> 
</bean> 

<beans profile="test"> 
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping" primary="true"> 
     <property name="flowRegistry" ref="flowRegistryTest"/> 
     <property name="defaultHandler"> 
      <!-- If no flow match, map path to a view to render; e.g. the "/intro" path would map to the view named 
      "intro" --> 
      <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> 
     </property> 
    </bean> 
</beans> 

Vielen Dank im Voraus!

Antwort

0

Ich fand zwei Lösungen für mein angegebenes Problem.

Nehmen Sie folgende Ausgangssituation an: Sie haben einen Federprofil namens Test. Sie haben einen Flow aFlow.xml und einen Flow bFlow.xml. Sie möchten aFlow unabhängig davon, welches Profil aktiv ist, registrieren und bFlow nur dann registrieren, wenn der Profiltest aktiv ist.

Die erste Lösung verwendet eine XML-basierte Konfiguration des Flussregisters:

<beans profile="!test"> 
    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
     <webflow:flow-location path=".../aFlow.xml"/> 
    </webflow:flow-registry> 
</beans> 
<beans profile="test"> 
    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
     <webflow:flow-location path=".../aFlow.xml"/> 
     <webflow:flow-location path=".../bFlow.xml"/> 
    </webflow:flow-registry> 
</beans> 

Die zweite Lösung eine Feder Java-basierte Konfiguration des Flussregisters verwendet:

@Configuration 
public class FlowRegistryConfiguration extends AbstractFlowConfiguration { 

    @Bean(name = "flowRegistry") 
    public FlowDefinitionRegistry flowDefinitionRegistry() { 

     FlowDefinitionRegistryBuilder builder = getFlowDefinitionRegistryBuilder(
      (FlowBuilderServices) getApplicationContext().getBean("flowBuilderServices")) 
      .addFlowLocation(".../aFlow.xml"); 

     List<String> activeProfiles = Arrays.asList(getApplicationContext().getEnvironment().getActiveProfiles()); 

     if (activeProfiles.contains("test")) { 
      builder = builder.addFlowLocation(".../bFlow.xml"); 
     } 

     return builder.build(); 
    } 
} 

Meiner Meinung nach dem zweiten Lösung ist besser, weil Sie nicht dieselbe ID an zwei verschiedenen Orten verwenden.

Verwandte Themen