アプリケーションのオブジェクト内の.propertiesファイルからプロパティを取得しようとしています。これを行う方法についての私の唯一の知識は、Environment
オブジェクトを介したものです。
それは私の構成でうまくいきます...
@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;
}
}
更新:見つかった this resource は@Value
の使用法を強調していますが、XMLを使用していませんアプリケーションの構成。
これは私が探しているものかもしれません: Spring 3.1のプロパティをプログラムでロードする
以下のように、Spring @Autowired
アノテーションを使用できますが、必ず@Component
または類似のクラスでクラスにアノテーションを付けてください。
@Autowired
Environment env;
また、スキャンするBeanが表示されていることを確認してください。つまり、Beanがcom.production
パッケージ内にある必要があります。このようにコンポーネントのスキャンを有効にする必要があります
<context:component-scan base-package="com.production"/>
または
@ComponentScan(basePackages = {"com.production"} )