web-dev-qa-db-ja.com

Spring Bootでapplication.propertiesファイルに定義されている値にアクセスする方法

application.propertiesで提供されている値にアクセスしたい。

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log

userBucket.path=${HOME}/bucket

Spring BootアプリケーションのメインプログラムでuserBucket.pathにアクセスしたい。

211
Qasim

@Valueアノテーションを使用して、使用しているどのSpring Beanのプロパティにもアクセスできます。

@Value("${userBucket.path}")
private String userBucketPath;

Spring Bootのドキュメントの Externalized Configuration セクションで、必要になるかもしれないすべての詳細を説明しています。

300
Master Slave

もう1つの方法は、BeanにEnvironmentを注入することです。

@Autowired
private Environment env;
....

public void method() {
    .....  
    String path = env.getProperty("userBucket.path");
    .....
}
161

@ConfigurationPropertiesは、.properties.ymlもサポートされている)からPOJOに値をマッピングするために使用できます。

次の例のファイルを見てください。

.properties

cust.data.employee.name=Sachin
cust.data.employee.dept=Cricket

Employee.Java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "cust.data.employee")
@Configuration("employeeProperties")
public class Employee {

    private String name;
    private String dept;

    //Getters and Setters go here
}

次のようにemployeePropertiesを自動配線することでプロパティ値にアクセスできるようになりました。

@Autowired
private Employee employeeProperties;

public void method() {

   String employeeName = employeeProperties.getName();
   String employeeDept = employeeProperties.getDept();

}
18
Jobin Joseph

あなたはそれを同様にすることができます....

@Component
@PropertySource("classpath:application.properties")
public class ConfigProperties {

    @Autowired
    private Environment env;

    public String getConfigValue(String configKey){
        return env.getProperty(configKey);
    }
}

それから、application.propertiesから読みたい場所であれば、キーをgetConfigValueメソッドに渡すだけです。

@Autowired
ConfigProperties configProp;

// Read server.port from app.prop
String portNumber = configProp.getConfigValue("server.port"); 
3
lucifer

この値を1か所で使用する場合は@Valueを使用してapplication.propertiesから変数を読み込むことができますが、この変数を読み込むためのより集中的な方法が必要な場合は@ConfigurationPropertiesがより良い方法です。

さらに、検証やビジネスロジックを実行するために異なるデータ型が必要な場合は、変数をロードして自動的にキャストすることもできます。

application.properties
custom-app.enable-mocks = false

@Value("${custom-app.enable-mocks}")
private boolean enableMocks;
1
JorgeTovar

Spring-bootは外部設定を提供するいくつかの方法を可能にします、あなたはプロパティファイルの代わりにapplication.ymlまたはyamlファイルを試してみることができて、異なる環境に従って異なるプロパティファイル設定を提供することができます。

各環境のプロパティを別々のスプリングプロファイルの下にある別々のymlファイルに分割することができます。デプロイ時には、次のものを使用できます。

Java -jar -Drun.profiles=SpringProfileName

使用するSpringプロファイルを指定します。YMLファイルの名前は次のようにします。

application-{environmentName}.yml

それらが自動的にspringbootに取り込まれるようにします。

参照: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties

Application.ymlまたはプロパティファイルから読み込むには:

最も簡単な方法 は、プロパティファイルまたはymlから値を読み取ることです。Springは、自動的にすべての値をymlからspring環境にロードします。環境のように:

@Component
public class MySampleBean {

@Value("${name}")
private String sampleName;

// ...

}

あるいは、厳密に型指定されたBeanを読み込むためにspringが提供する別の方法は次のとおりです。

YML

ymca:
    remote-address: 192.168.1.1
    security:
        username: admin

Ymlを読むための対応するPOJO:

@ConfigurationProperties("ymca")
public class YmcaProperties {
    private InetAddress remoteAddress;
    private final Security security = new Security();
    public boolean isEnabled() { ... }
    public void setEnabled(boolean enabled) { ... }
    public InetAddress getRemoteAddress() { ... }
    public void setRemoteAddress(InetAddress remoteAddress) { ... }
    public Security getSecurity() { ... }
    public static class Security {
        private String username;
        private String password;
        public String getUsername() { ... }
        public void setUsername(String username) { ... }
        public String getPassword() { ... }
        public void setPassword(String password) { ... }
    }
}

上記の方法は、ymlファイルでうまく機能します。

参照: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

0

私にとっては、上記のどれも私には直接働きませんでした。私がしたことは次のとおりです:

@Rodrigo Villalba Zayasに加えて、そこに答えます
implements InitializingBeanクラスへ
そしてメソッドを実装しました

@Override
public void afterPropertiesSet() {
    String path = env.getProperty("userBucket.path");
}

それは次のようになります

import org.springframework.core.env.Environment;
public class xyz implements InitializingBean {

    @Autowired
    private Environment env;
    private String path;

    ....

    @Override
    public void afterPropertiesSet() {
        path = env.getProperty("userBucket.path");
    }

    public void method() {
        System.out.println("Path: " + path);
    }
}
0
Rapalagui