2013-03-13 12 views
7

Sto tentando di ottenere proprietà da un file .properties all'interno di un oggetto della mia applicazione. La mia unica conoscenza su come farlo è tramite l'oggetto Environment.Come autowire un oggetto Spring Environment

E le grandi opere nella mia configurazione ...

@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; 

ma io cerco di farlo in un'altra classe ed è nullo. Ho provato a utilizzare @Resource e @Autowired e l'iniezione manuale.

C'è qualcosa di speciale su Environment che impedisce questo?

@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; 
    } 
} 

Aggiornamento: Ho trovatothis resource che mette in evidenza l'uso di @Value, ma io non uso alcuna configurazione XML nella mia applicazione.

Sembra che questo potrebbe essere quello che sto cercando: Loading properties in Spring 3.1 programmatically

+0

Non credo che un ambiente è rilevante in qualcosa di diverso carico contesto di applicazione. –

+0

C'è un altro modo per ottenere gli elementi di configurazione dai file .properties? – Webnet

+1

Viene in mente l'annotazione '@ Value', ma dovrai configurare' PropertyPlaceholderConfigurer'. Non citarlo su questo, ma controlla. –

risposta

9

È necessario utilizzare @Value annotaion per esso. Ma prima è necessario dichiarare <context:property-placeholder in xml.

Vedere here per dettagli.

Inoltre, un altro modo:

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

È possibile utilizzare primavera @Autowired annotazioni come sotto, ma assicuratevi di annotare la classe con @Component o similari quelli.

@Autowired 
Environment env; 

Assicurarsi inoltre che il fagiolo è visibile per la scansione, vale a dire che dovrebbe essere all'interno com.production pacchetto nel tuo caso. scansione dei componenti deve essere abilitato come questo

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

o

@ComponentScan(basePackages = {"com.production"}) 
Problemi correlati