2013-03-13 14 views
7

Próbuję uzyskać właściwości z pliku .properties w obiekcie mojej aplikacji. Moja jedyna wiedza o tym, jak to zrobić, to obiekt Environment.Jak wyposażyć obiekt środowiska Spring

Działa świetnie w moim konfiguracji ...

@Configuration 
@ComponentScan(basePackages = { 
     "com.production" 
}) 
@PropertySource(value = { 
     "classpath:/application.properties", 
     "classpath:/environment-${FETTER_ENVIRONMENT}.properties" 
}) 
@EnableJpaRepositories("com.production.repositories") 
@EnableTransactionManagement 
public class Config { 
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; 
    private static final String PROPERTY_NAME_DATABASE_USER = "db.user"; 
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; 

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
    private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql"; 
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; 

    @Resource 
    Environment environment; 

Ale staram się to zrobić w innej klasy i jest to wartość null. Próbowałem już używać @Resource i @Autowired i ręcznego wstrzykiwania.

Czy jest coś wyjątkowego w przypadku Environment, które temu zapobiega?

@Component 
public class Vendor { 
    private String token; 

    @Autowired 
    private Environment environment; 

    public Vendor() { 
     //get token from config 
     //Environment environment = (Environment) ApplicationContextProvider.getApplicationContext().getBean("environment"); 
     setToken(environment.getProperty("api.vendor.token")); 
    } 

    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 
} 

Aktualizacja: znalazłem this resource który podkreśla wykorzystanie @Value, ale nie używam żadnej konfiguracji XML w mojej aplikacji.

Wygląda na to może być to, co szukam: Loading properties in Spring 3.1 programmatically

+0

nie sądzę środowisku jest istotne w coś innego niż obciążenia kontekstowego aplikacji. –

+0

Czy jest inny sposób, aby uzyskać elementy konfiguracji z plików .properties? – Webnet

+1

Pojawia się adnotacja '@ Wartość', ale musisz skonfigurować' PropertyPlaceholderConfigurer'. Nie cytuj mnie, ale spójrz na to. –

Odpowiedz

9

Trzeba użyć @Value annotaion dla niego. Ale zanim będzie wymagane oświadczenie <context:property-placeholder w xml.

Aby uzyskać szczegółowe informacje, patrz here.

też inny sposób:

@Inject 
ApplicationContext context; 
...... 
Enviroment env = context.getEnvironment(); 
4

Można użyć wiosna @Autowired adnotacji jak poniżej, ale upewnij się, że opisywanie swoją klasę z @Component lub podobnych.

@Autowired 
Environment env; 

Również upewnić Twój fasola jest widoczny podczas skanowania, to znaczy powinno być wewnątrz com.production pakietu w Twoim przypadku. Składnik skanowania powinny być włączone jak to

<context:component-scan base-package="com.production"/> 

lub

@ComponentScan(basePackages = {"com.production"}) 
Powiązane problemy