de lente eigendom vervanging voor test-en productie

Ik liep in deze voor goederen substitutie in het voorjaar

<context:property-placeholder location="esb-project-config.properties"/>

maar helaas, dit willen wij niet in het xml-bestand als we willen opnieuw gebruik maken van de file in onze tests, maar wisselen in de test.eigenschappen bestand voor de test. dat wil zeggen. we willen testen of alle productie bindingen maar met eigenschappen die zeer geschikt zijn voor de test, zoals localhost bijvoorbeeld. Hoe kunnen we laden de ApplicationContext maar met andere eigenschappen van bestanden?

bedankt,
Dean

 

5 Replies
  1. 8

    Huis-aanduiding configuratie in een extra veer xml configuratie bestand.

    Bijvoorbeeld:

    • applicationContext.xml — voor de normale configration zonder elke eigenschap-aanduiding configuratie
    • applicationContext-config.xml — bevat alleen een eigenschap-aanduiding dat het laden van de productie-config bestand.
    • testApplicationContext.xml. Dit bestand includes de applicationContext.xml en maakt gebruik van een woning-aanduiding met een andere properties bestand.

    In een Web-App die je kan laden alle productie lente context-bestanden met dit patroon applicationContext*.xml.

    Voor de tests die u hoeft alleen maar te laden testApplicationContext.xml dit zijn de normale configuratie, maar met andere eigenschappen.

  2. 84

    verschillende benaderingen:


    1. ‘Om’ Eigendom

    in src/main/resources/your-conf.xml

    <context:property-placeholder 
             location="classpath:esb-project-config.properties"
             order="1"/>

    in src/test/resources/your-test-config.xml

    <context:property-placeholder 
             location="classpath:esb-project-config.properties"
             order="0"/>

    Als u met uw test met src/test/resources als een test classpath, is de bovengenoemde zal zorgen voor het overschrijven van src/main/resources/esb-project-config.properties met de src/test/resources/esb-project-config.properties.

    Deze voorrang op de hele property-placeholder al, dus je zou hebben alle eigenschappen die nodig zijn in uw toepassing voor deze test property-placeholder. bijvoorbeeld

    <context:property-placeholder 
             location="classpath:esb-project-config.properties,
                       classpath:some-other-props-if-needed.properties"
             order="0"/>

    2. PropertyOverrideConfigurer

     <context:property-override 
              location="classpath:esb-project-config.test.properties"/>

    voor het overschrijven van bepaalde individuele eigenschappen. Enkele voorbeelden hier


    3. Systeem Variabelen

    U kunt een prefix van de controle-omgeving van de specifieke eigenschappen, dit kan gedaan worden met behulp van de systeem variabelen:

     <context:property-placeholder 
              location="${ENV_SYSTEM:dev}/esb-project-config.properties"/>

    In dit geval zal altijd kijken onder:

     <context:property-placeholder 
              location="dev/esb-project-config.properties"/>

    standaard, tenzij een ENV_SYSTEM systeem variabele is ingesteld. Als deze is ingesteld op qa, bijvoorbeeld, zal het automatisch kijk onder:

     <context:property-placeholder 
              location="qa/esb-project-config.properties"/>

    4. De Lente Profielen

    Een andere benadering is om bonen specifieke profiel. Bijvoorbeeld:

    <beans profile="dev">
      <context:property-placeholder 
               location="esb-project-config.dev.properties"/>
    </beans>
    
    <beans profile="qa">
      <context:property-placeholder 
               location="esb-project-config.qa.properties"/>
    </beans>

    De juiste esb-project-config wordt geladen, afhankelijk van een profiel. Bijvoorbeeld deze laadt esb-project-config.dev.properties:

    GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
    ctx.getEnvironment().setActiveProfiles( "dev" );
    ctx.load( "classpath:/org/boom/bang/config/xml/*-config.xml" );
    ctx.refresh();

    • OPMERKING: “systeemvariabelen” en “Systeem Profielen” benaderingen worden meestal gebruikt om te schakelen tussen de verschillende omgevingen in plaats van alleen “dev <==> test” in dev-modus, maar nog steeds bruikbaar zijn mogelijkheden om op de hoogte was.
    • Ik probeerde de 4) Lente profiel deel en het lijkt niet te werken. Ik denk dat je het niet kan gebruiken aangepaste namespaces binnen <beans> ?
    • Kunt u verklaren dat de tijdelijke aanduidingen normaal of gebruik: <context:eigendom-aanduiding locatie=”classpath:config_${voorjaar.profielen.actieve}.eigenschappen” />
    • Aanpak 4 werkt voor mij. Ik ben niet met behulp van aangepaste naamruimten in al. Alleen met behulp van standaard context:property-placeholder.
  3. 5
    • Op de context tag kunt u aangeven dat als een properties-bestand bevat
      bestaat niet het is niet nodig om te mislukken.
    • Eigendom bestanden worden geplaatst in de volgorde waarin ze worden gedeclareerd. (Dit
      misschien ook wel een eigendom te verklaren op de tag. Niet zeker)
    • Als een eigenschap wordt verklaard meerdere keren, de laatste waarde is geladen
      gebruikt.

    We gebruik maken van deze drie functies is als volgt:

    Wij verklaren twee goederen bestanden:

    classpath:esb-project-config.properties,
    classpath:esb-project-config-override.properties

    De eerste eigenschap-bestand bevat zinnige standaarden en ontwikkeling van de configuratie. Dit bestand is een onderdeel van uw aanvraag.

    De tweede eigenschap van bestand is een bestand dat beschikbaar is op het test classpath of zelfs de productie classpath van de application server. Dit bestand is externe van de toepassing
    Op die manier kunnen we negeren eigenschappen voor elke omgeving en hebben slechts één versie van onze applicatie.

    Dus hier is de voorbeeld van de eigenschappen die we gebruiken:

        <context:property-placeholder 
           ignore-resource-not-found="true" ignore-unresolvable="true" 
           location="classpath:esb-project-config.properties,classpath:esb-project-config-override.properties" />
  4. 4

    Mijn voorkeur, zoals toegevoegd bij de lente 3.1, is als volgt:

    In uw *-context.xml:

    <context:property-placeholder location="classpath:/web-${spring.profiles.active}.properties" />

    en in web.xml:

    <context-param>
        <param-name>spring.profiles.default</param-name>
        <param-value>prod</param-value>
    </context-param>

    Vervolgens kunt u de omgeving tijdens de uitvoering, bijvoorbeeld:

    mvn -Dspring.profiles.active=dev jetty:run

    Of hoe je argumenten doorgeven aan uw container.

  5. 3

    Het lijkt:

      <beans profile="dev">
        <context:property-placeholder location="classpath:config/dev.properties"/>
      </beans>
      <beans profile="prod">
        <context:property-placeholder location="classpath:config/prod.properties"/>
      </beans>

    Het niet werkt. Maar je kunt het doen:

    <context:property-placeholder location="classpath:config_${spring.profiles.active}.properties" />
    • Wat niet werkt voor u? Ik doe dit nu precies in mijn applicatie zonder problemen.
    • Ik denk dat de eerste niet werken voor mij, maar ik kan het mis hebben. Als ik me herinner je kunt niet een dergelijke eigenschap tijdelijke code aan de binnenkant van een bonen-profiel tag. Hoe dan ook, met de Lente 3.1 het beste is om te registreren PropertySources in de omgeving en verklaren niet alle lokale eigendom bestanden in de context imho
    • Welke techniek gebruik je voor het registreren van de PropertySources? Een initializer? De woning-tijdelijke code moeten de woningen in de Omgeving. Dat gezegd, wordt u mogelijk recht over de goederen-aanduiding binnen in de ‘bonen’ – tag. Ik maakte het werk, maar het lijkt niet zo gedragen als ik twee verschillende contexten met bonen elementen die eigendom-tijdelijke aanduidingen in. Misschien in verband met deze bug. jira.springsource.org/browse/SPR-9989
    • Ik gebruik zoiets: stackoverflow.com/questions/10669474/… staat Het verfijnde controle over de eigenschappen, en u kunt ook de eigenschappen van een Xml-toepassing context, net voor de context is vernieuwd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *