2013-03-13 34 views
7

我試圖從我的應用程序的對象中的.properties文件中獲取屬性。我唯一的知識就是通過Environment這個對象。如何自動裝入Spring環境對象

它工作在我的配置偉大的...

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

但我儘量做到在另一個類,它是零。我試過使用@Resource@Autowired和手動注射。

Environment有什麼特別的嗎?

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

更新:我發現this resource其中突出的@Value的用法,但我沒有在我的應用程序中使用任何XML配置。

看起來這可能是什麼我在尋找:Loading properties in Spring 3.1 programmatically

+0

我不認爲環境是不是應用程序環境負荷以外的任何有關被啓用。 – 2013-03-13 14:58:58

+0

有沒有另外一種方法讓我從.properties文件獲取配置項目? – Webnet 2013-03-13 14:59:32

+1

「@ Value」註釋讓人想起,但您必須設置一個「PropertyPlaceholderConfigurer」。不要在此引用我的意思,但請看一下。 – 2013-03-13 15:00:39

回答

9

您需要使用@Value annotaion它。但在之前需要在xml中聲明<context:property-placeholder

查看here瞭解詳情。

此外,另一種方式:

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

你可以使用Spring @Autowired註釋如下,但要確保你的註釋類@Component或類似的。

@Autowired 
Environment env; 

此外請確保您的bean是可見的掃描,即它應該在您的案件com.production包內。 組件掃描應該這樣

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

@ComponentScan(basePackages = {"com.production"}) 
相關問題