Application.yamlに次のプロパティがある場合:
myPro:
prop1: prop1value
prop2: prop2value
....
これをJava Properties
オブジェクトにロードする方法はありますか?
デフォルトでは、Springはそれらのアプリケーションプロパティをすべて環境に配置します。これは Properties
のラッパーです。次に例を示します。
@Autowired
private Environment environment;
public void stuff() {
environment.getProperty("myPro.prop1");
environment.getProperty("myPro.prop2");
}
ただし、値を使用するだけの場合は、常に@Value
アノテーションを使用できます。次に例を示します。
@Value("${myPro.prop1}")
private String prop1;
@Value("${myPro.prop2}")
private String prop2;
最後に、Properties
のすべてのものだけを含むmyPro
オブジェクトが本当に必要な場合は、次のBeanを作成できます。
@ConfigurationProperties(prefix = "myPro")
@Bean
public Properties myProperties() {
return new Properties();
}
これで、プロパティを自動配線して使用できます。
@Autowired
@Qualifier("myProperties")
private Properties myProperties;
public void stuff() {
myProperties.getProperty("prop1");
myProperties.getProperty("prop2");
}
この場合、必ずしもProperties
にバインドする必要はありませんが、フィールド名prop1
と別のフィールド名prop2
がある限り、カスタムPOJOを使用できます。 。
これらの3つのオプションは ドキュメント にもリストされています:
プロパティ値は、
@Value
アノテーションを使用して直接Beanに注入できます。これは、SpringのEnvironment
抽象化を介してアクセスするか、@ConfigurationProperties
を介して構造化オブジェクトにバインドします。
リファレンスドキュメントの手順 に従うと、Springはプロパティの読み込みを処理します。要するに...
タグ付けされているため、Spring-Bootを使用していると思います。まだ作成していない場合は、/src/main/resources/application.yml
以下のコンテンツ:
myPro:
prop1: prop1value
prop2: prop2value
次に、次のようにプロパティ値を挿入するだけです。
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${myProp.prop1}")
String prop1;
@Value("${myProp.prop2}")
String prop2;
@Override
public void run(String... args) throws Exception {
System.out.println(prop1);
System.out.println(prop2);
}
}
pom.xml
への依存関係を使用して問題を解決しました
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>