2016-03-30 7 views
0

ich eine Eigenschaft Quelle im Frühjahr definiert habe, wo ich eine Eigenschaft zu laden versuchen in dem Classpath vorhanden Datei@Value nicht in anderen Paketen injiziert bekommen

@Configuration 
@PropertySource(name = "props", value = "classpath:prod.properties") 

public class PropertyPlaceholderConfigurerConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer() { 

     PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer(); 

     Resource[] resources = new ClassPathResource[] 

     { new ClassPathResource("prod.properties") }; 

     ppc.setLocations(resources); 

     ppc.setIgnoreUnresolvablePlaceholders(true); 

     return ppc; 

    } 

    @Value("${DATABASE_NAME}") private String DATABASE_NAME; 

    @Bean 
    public String test() { 
    System.out.println(DATABASE_NAME); 

    } 
} 

Meine prod.properties Datei hat 1 Eintrag

DATABASE_NAME = proddb_123

nun in dem Test() bean druckt als proddb_123

("$ {DATABASE_NAME}") private String DATABASE_NAME

Zwei Probleme, die ich bin vor ist

  1. ich eine andere Klasse in einem anderen Paket, wo ich es versuche

    @Value zu injizieren;

    Aber der Wert dieser ist immer „$ {DATABASE_NAME}“

  2. ich verschiedene gradle Projekte wie Webapplikation-gradle haben, ist ein wo die @PropertySouce Konfiguration definiert ist, und eine andere Projekt wie Storage-gradle. Kann ich den DATABASE_NAME in eine Klasse injizieren, die im Storage-Gradle-Projekt vorhanden ist.

Antwort

0

In den anderen Klassen, in denen Sie möchten, dass die @Value ($ {DATABASE_NAME} ") Sie haben auch injizieren, um die @PropertySource Anmerkung yse. Eine andere Möglichkeit ist es, die @PropertySource Anmerkungen und in der applicaiton zu entfernen -context.xml hat eine Bean der Klasse org.springframework.beans.factory.condig.PropertyPlaceholderConfigurer definiert und für die Liste der Eigenschaften-Locations einen Wert für den Klassenpfad hinzugefügt: prod.properties

+0

Meine Spring-Konfiguration ist Java-Annotation-basierte Konfiguration Bitte geben Sie mir einen Ausschnitt davon, damit ich das verstehen kann. " –

+0

Ich habe die PropertySouce-Konfigurationen entfernt und basierend auf Profile Beans für PropertyPlaceholderConfigurer erstellt. Später habe ich al l die Werte in eine separate Bean (PropertyBean.java) und dann wo immer ich diese Eigenschaften verwenden wollte, habe ich gerade die PropertyBean injiziert und daraus verwendet. Vielen Dank –