2013-03-13 12 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; 

...私の構成で素晴らしい作品しかし、私は別のクラスでそれをやろうと、それがnullです。私は@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; 
    } 
} 

更新:私は@Valueの使用を強調this resourceを見つけましたが、私は自分のアプリケーション内の任意のXML構成を使用しないでください。

これは私が探してかもしれないように見えます:あなたはそれのため@Value annotaionを使用する必要がLoading properties in Spring 3.1 programmatically

+0

のように有効にする必要があります。 –

+0

.propertiesファイルから設定項目を取得する別の方法はありますか? – Webnet

+1

'@ Value'アノテーションが気になりますが、' PropertyPlaceholderConfigurer'をセットアップする必要があります。これに私を引用しないでくださいが、それを見てください。 –

答えて

9

。しかし、xmlで<context:property-placeholderを宣言する必要がある前に。

詳細はhereを参照してください。

また

、別の方法:

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

あなたは以下のように春@Autowiredアノテーションを使用していますが、@Componentまたは類似のものを使用してクラスに注釈を付けることを確認することができます。

@Autowired 
Environment env; 

はまた、それはあなたのケースでcom.productionパッケージ内にある必要があります。すなわち、あなたのBeanは、スキャン用に可視であることを確認してください。 コンポーネントスキャニングは、私は環境のアプリケーションコンテキストのロード以外に関連性があるとは思わないこの

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

または

@ComponentScan(basePackages = {"com.production"}) 
関連する問題