2013-01-08 6 views
11

Po tej klasie, aby zastąpić już ustawione @PropertySource w innej klasie Config.Jak zastąpić Spring 3.1 @PropertySource, aby ustawić IgnoreResourceNotFound i IgnoreUnresolvablePlaceholders

@Configuration 
@PropertySource({ "classpath:${env.placeholder}/app.properties" }) 
public class PropertyOverrideConfig { 

} 

Ale za każdym razem, gdy brakuje pliku lub symbolu zastępczego, nie można załadować kontekstu. Muszę ustawić następujące flagi dla tej właściwości załadowanej adnotacji, aby ją pominąć, jeśli nie jest ona w stanie znaleźć tej właściwości.

 setIgnoreResourceNotFound(true); 
     setIgnoreUnresolvablePlaceholders(true); 

question1: Jaki byłby odpowiedni sposób ustawić te flagi na @PropertySource?

Aktualizacje: Wypróbowane dodanie @Bean do tej samej klasy bez tej adnotacji odsyłający this stronę, to nie jest zbieranie pliku właściwości albo. Nie mam konfiguracji xml.

@Bean 
public static PropertySourcesPlaceholderConfigurer properties() { 
    final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); 

    Resource[] resources = new ClassPathResource[ ] { 
        new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 

    pspc.setLocations(resources); 
    pspc.setIgnoreResourceNotFound(true); 
    pspc.setIgnoreUnresolvablePlaceholders(true); 
    return pspc; 
} 

question2: Jestem pewien, że jestem brakuje czegoś, ale nie mógł dowiedzieć się, co to jest, każda pomoc będzie wielki.

+0

Czy jesteś pewien, że nie zarejestrowano żadnych innych instancji PropertySourcesPlaceholderConfigurer? Może powinieneś zrobić metodę z adnotacją @ @ Bean, która zwraca staticSourcesPlaceholderConfigurer static (jak zaleca java doc dla '@ Bean') –

+0

Dzięki @BorisTreukhov, przegapiłem statyczne podczas wysyłania. Tymczasem, co by się stało, gdybym miał już ten sam atrybut "PropertySourcesPlaceholderConfigurer" już zarejestrował komponent bean w innej konfiguracji? – raksja

+0

Nie pamiętam dokładnie, ale możesz mieć kilka PropertySourcesPlaceholderConfigurers (i podać im różne prefiksy/sufiksy zastępcze) - może jest inny konfigurator symboli zastępczych, który narzeka na nierozwiązywalne symbole zastępcze –

Odpowiedz

4

myślę, że w końcu zorientowali się odpowiedź na question1:

Jak ustawić ignorowanie flagi na właściwości dodawanych przez @PropertySource?

Its Not There wiosną nadal, jej zaproponowano jako Minor poprawy. Mamy nadzieję, że dodatkowy atrybut zostanie dodany do adnotacji wkrótce w przyszłej wersji.

SPR-8371

Nadal nie wiesz o drodze do zrealizowania scenariusza wymienione i braku odpowiedzi na question2.

+1

Istnieje również [SPR-10325] (https : //jira.springsource.org/browse/SPR-10325): "Pozwól na ignoreResourceNotFound na @PropertySource", zagłosuj na to! – Robin

0

Spróbuj usunąć classpath:, to nie jest potrzebne do korzystania ClassPathResource:

new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 
1

naprawdę nie jest rozwiązaniem, ale obejście, jeśli trzeba trzymać się sprężyny 3: stosować obojętne domyślną, która istnieje, to znaczy w twoim przypadku:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" }) 
Powiązane problemy