2017-04-05 1 views
0

をプロファイル:開発テスト、...質問がある登録異なるフローは、異なる春のプロファイルがあります私のアプリケーションで

活性化に応じて、流れを登録する方法があります春のプロファイル?

たとえば、フロー:aFlow.xml、bFlow.xmlがあります。

春プロファイルの開発が活性化されると、私は

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

ような何かをしたいとスプリングプロファイル試験が活性化されれば、その後、私は

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

背景のような何かをしたい:春のプロファイルの開発がある場合bFlow.xmlにアクセスできないことがあります。スプリングプロファイルテストが有効になっている場合は、aFlow.xmlとbFlow.xmlにアクセス可能である必要があります。

現在、以下の解決策があります。私は

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

を定義して、春のプロファイルに応じて、異なるFlowHandlerMappingを使用します。

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

感謝を事前に!

答えて

0

私の述べた問題に対して2つの解決策が見つかりました。

次の初期状態を前提とします。テストという名前のスプリングプロファイルがあります。フローaFlow.xmlとフローbFlow.xmlがあります。プロファイルがアクティブで、プロファイルテストがアクティブな場合にのみbFlowを登録したい場合でも、aFlowを登録します。

最初のソリューションは、フローレジストリのXMLベースの設定使用しています。私の意見では、第二の

@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(); 
    } 
} 

:第二の溶液が流れレジストリの春のJavaベースの構成を使用しています

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

を2つの異なる場所で同じIDを使用しないため、ソリューションが優れています。

関連する問題