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
にアクセスしたい。
@Value
アノテーションを使用して、使用しているどのSpring Beanのプロパティにもアクセスできます。
@Value("${userBucket.path}")
private String userBucketPath;
Spring Bootのドキュメントの Externalized Configuration セクションで、必要になるかもしれないすべての詳細を説明しています。
もう1つの方法は、BeanにEnvironmentを注入することです。
@Autowired
private Environment env;
....
public void method() {
.....
String path = env.getProperty("userBucket.path");
.....
}
@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();
}
あなたはそれを同様にすることができます....
@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");
この値を1か所で使用する場合は@Value
を使用してapplication.properties
から変数を読み込むことができますが、この変数を読み込むためのより集中的な方法が必要な場合は@ConfigurationProperties
がより良い方法です。
さらに、検証やビジネスロジックを実行するために異なるデータ型が必要な場合は、変数をロードして自動的にキャストすることもできます。
application.properties
custom-app.enable-mocks = false
@Value("${custom-app.enable-mocks}")
private boolean enableMocks;
Spring-bootは外部設定を提供するいくつかの方法を可能にします、あなたはプロパティファイルの代わりにapplication.ymlまたはyamlファイルを試してみることができて、異なる環境に従って異なるプロパティファイル設定を提供することができます。
各環境のプロパティを別々のスプリングプロファイルの下にある別々のymlファイルに分割することができます。デプロイ時には、次のものを使用できます。
Java -jar -Drun.profiles=SpringProfileName
使用するSpringプロファイルを指定します。YMLファイルの名前は次のようにします。
application-{environmentName}.yml
それらが自動的にspringbootに取り込まれるようにします。
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
私にとっては、上記のどれも私には直接働きませんでした。私がしたことは次のとおりです:
@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);
}
}