web-dev-qa-db-ja.com

Spring Bootプロジェクトで、application.yamlをJavaプロパティにロードする方法

Application.yamlに次のプロパティがある場合:

myPro:
   prop1: prop1value
   prop2: prop2value
....

これをJava Propertiesオブジェクトにロードする方法はありますか?

7
Hollando Romi

デフォルトでは、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を介して構造化オブジェクトにバインドします。

10
g00glen00b

リファレンスドキュメントの手順 に従うと、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);
    }
}
0
Pär Nilsson

pom.xmlへの依存関係を使用して問題を解決しました

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
0
victorlage7