2013-01-17 15 views
10

Używam Spring Java config, aby utworzyć mój komponent bean. Ale ten komponent jest wspólny dla 2 aplikacji. Obie mają jeden plik właściwości abc.properties, ale z różnymi lokalizacjami ścieżek klas. kiedy kładę wyraźną ścieżkę klasy jakWildcard classpath @PropertySource

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

to działa, ale gdy próbuję użyć wieloznaczny jak

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

to nie działa. Próbuję wielu kombinacji symboli wieloznacznych, ale nadal nie działa. Czy symbol wieloznaczny działa w @ProeprtySource Czy jest jakiś inny sposób, aby przeczytać własność w kategorii oznaczonej @Configurations.

Odpowiedz

13

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

obejście: próby

@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

Dodanie 'static' modyfikator spowoduje ostrzeżenie podane podczas rozmieszczania:„ConfigurationClassEnhancer. 310 - '@ metoda Bean' Test.getPropertyPlaceholderConfigurer nie jest statyczny i zwraca obiekt przypisane do interfejsu sprężyny BeanFactoryPostProcessor To spowoduje błąd w przetwarzaniu adnotacji takich jak '@ Autowired',' @ Resource' i '@ PostConstruct' w deklarowanej przez metodę klasie' @ Configuration' Dodaj do tej metody 'statyczny' modyfikator, aby uniknąć problemów związanych z cyklem życia kontenera, patrz '@Bean 'javadoc dla pełnych szczegółów." Ale dzięki, to działało jak czar. –

6

Addidtionally do dmay obejście:

od wiosny 3,1 PropertySourcesPlaceholderConfigurer należy stosować korzystnie na PropertyPlaceholderConfigurer i fasoli powinny być statyczne .

@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 Zapisałeś mój dzień – sjngm

+0

To pokazuje 'Nieobsługiwany wyjątek typu wyjątek IOException' – Lucky