2013-01-17 17 views
10

Sto utilizzando Spring Java config per creare il mio bean. Ma questo bean è comune a 2 applicazioni. Entrambi hanno un file di proprietà abc.properties ma con percorsi di percorso di classe differenti. quando ho messo classpath esplicito comejolly del classpath in @PropertySource

@PropertySource("classpath:/app1/abc.properties") 

allora funziona, ma quando provo ad usare jolly come

@PropertySource("classpath:/**/abc.properties") 

allora non funziona. Ho provato molte combinazioni di caratteri jolly ma ancora non funziona. Il jolly funziona in @ProeprtySource C'è un altro modo per leggere la proprietà in classe contrassegnata con @Configurations.

risposta

13

@PropertySource API: Resource location wildcards (e.g. **/*.properties) are not permitted; each location must evaluate to exactly one .properties resource.

soluzione: provate

@Configuration 
public class Test { 

    @Bean 
    public PropertyPlaceholderConfigurer getPropertyPlaceholderConfigurer() 
      throws IOException { 
     PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
     ppc.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/**/abc.properties")); 
     return ppc; 
    } 
+1

Aggiunta 'modificatore static' impedirà avvertimento dato mentre la distribuzione: "ConfigurationClassEnhancer:. 310 - '@ metodo Bean' Test.getPropertyPlaceholderConfigurer non è statica e restituisce un oggetto assegnabile all'interfaccia BeanFactoryPostProcessor di Spring Questo si tradurrà in un fallimento nell'elaborazione di annotazioni come '@ Autowired',' @ Resource' e '@ PostConstruct' all'interno del metodo che dichiara la classe' @ Configuration'. Aggiungere il modificatore 'static' a questo metodo per evitare questi problemi del ciclo di vita del contenitore; vedere '@Bean 'javadoc per i dettagli completi." Ma grazie, ha funzionato come un fascino. –

6

Addidtionally a dmay soluzione:

Da Spring 3.1 PropertySourcesPlaceholderConfigurer deve essere utilizzato preferenzialmente sopra PropertyPlaceholderConfigurer e il fagiolo dovrebbe essere statico .

@Configuration 
public class PropertiesConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() { 
    PropertySourcesPlaceholderConfigurer propertyConfigurer = new PropertySourcesPlaceholderConfigurer(); 
    propertyConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/**/abc.properties")); 
    return propertyConfigurer; 
    } 

} 
+1

+1 Mi hai salvato il giorno – sjngm

+0

Questo mostra "Eccezione IOException non gestita" – Lucky