2013-03-13 10 views
7

Uygulamamın bir nesnesindeki bir .properties dosyasından özellik almayı deniyorum. Bunun nasıl yapılacağına dair tek bilgim Environment nesnesi üzerinden gerçekleşiyor.Spring Environment nesnesinin otomatikleştirilmesi nasıl yapılır

Benim yapılandırmasında büyük eserler ...

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

Ama başka bir sınıfta bunu yapmak için deneyin ve boş bu. @Resource ve @Autowired ve manuel enjeksiyon kullanarak denedim.

Bunu engelleyen Environment hakkında özel bir şey var mı?

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

Güncelleme: Ben @Value kullanımını vurgular this resource buldum, ama benim uygulamada herhangi bir XML konfigürasyon kullanmayın. Loading properties in Spring 3.1 programmatically

+0

gibi etkinleştirilmelidir. –

+0

.properties dosyalarından yapılandırma öğeleri almanın başka bir yolu var mı? – Webnet

+1

'@ Value' açıklaması akla geliyor, ancak bir 'PropertyPlaceholderConfigurer' kurmanız gerekecek. Bana bundan alıntı yapma, ama bak. –

cevap

9

Bunun için @Value annotaion kullanmak gerekir:

Bu benim aradığım şey olabilir gibi görünüyor. Ancak önce xml olarak <context:property-placeholder bildirilmesi gerekiyor. Ayrıntılar için here adresine bakın. Ayrıca

, başka bir yol:

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

Sen olarak aşağıda bahar @Autowired notu kullanın, ancak @Component veya benzer olanlarla sınıfınızı açıklama emin olabiliriz.

@Autowired 
Environment env; 

Ayrıca sizin durumunuzda com.production paket içerisinde olmalıdır yani Fasulye, tarama için görünür olduğundan emin olun. Bileşen tarama Bir Çevre uygulama bağlamı yükü dışında başka bir şey alakalı olduğunu sanmıyorum bu

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

veya

@ComponentScan(basePackages = {"com.production"}) 
İlgili konular