에 제공된 값에 액세스하고 싶습니다 application.properties
. 예 :
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
userBucket.path
Spring Boot 응용 프로그램의 기본 프로그램에 액세스 하고 싶습니다.
답변
@Value
주석을 사용하고 사용 중인 Spring Bean의 속성에 액세스 할 수 있습니다
@Value("${userBucket.path}")
private String userBucketPath;
스프링 부트 문서 의 Externalized Configuration 섹션은 필요한 모든 세부 사항을 설명합니다.
답변
다른 방법은 org.springframework.core.env.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();
}
답변
현재 다음 세 가지 방법에 대해 알고 있습니다.
1. @Value
주석
@Value("${<property.name>}")
private static final <datatype> PROPERTY_NAME;
- 내 경험상 값을 얻지 못하거나로 설정되어있는 상황이
null
있습니다. 예를 들어,preConstruct()
메소드 또는 메소드 에서 설정하려고 할 때init()
. 이것은 클래스가 완전히 구성된 후에 값 주입이 발생하기 때문에 발생합니다. 그렇기 때문에 3 번째 옵션을 사용하는 것이 좋습니다.
2. @PropertySource
주석
<pre>@PropertySource("classpath:application.properties")
//env is an Environment variable
env.getProperty(configKey);</pre>
PropertySouce
Environment
클래스가로드 될 때 속성 소스 파일의 값을 변수 (클래스 내)에 설정합니다. 그래서 당신은 쉽게 후문을 가져올 수 있습니다.- 시스템 환경 변수를 통해 액세스 할 수 있습니다.
3. @ConfigurationProperties
주석.
- 이것은 주로 Spring 프로젝트에서 구성 속성을로드하는 데 사용됩니다.
-
속성 데이터를 기반으로 엔터티를 초기화합니다.
@ConfigurationProperties
로드 할 특성 파일을 식별합니다.@Configuration
구성 파일 변수를 기반으로 Bean을 작성합니다.
@ConfigurationProperties (접두사 = "사용자") @Configuration ( "UserData") 수업 사용자 { // 속성 및 게터 / 세터 } @Autowired 개인 사용자 데이터 사용자 데이터; userData.getPropertyName ();
답변
당신도 이런 식으로 할 수 있습니다 ….
@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");
답변
한 곳에서이 값을 사용 @Value
하는 application.properties
경우를 사용하여 변수를로드 할 수 있지만보다 집중적 인 방법으로이 변수를로드 @ConfigurationProperties
하는 것이 더 좋습니다.
또한 검증 및 비즈니스 로직을 수행하기 위해 다른 데이터 유형이 필요한 경우 변수를로드하고 자동으로 캐스트 할 수 있습니다.
application.properties
custom-app.enable-mocks = false
@Value("${custom-app.enable-mocks}")
private boolean enableMocks;
답변
다음과 같이하세요. 1 :-아래와 같이 구성 클래스를 만듭니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Value;
@Configuration
public class YourConfiguration{
// passing the key which you set in application.properties
@Value("${userBucket.path}")
private String userBucket;
// getting the value from that key which you set in application.properties
@Bean
public String getUserBucketPath() {
return userBucket;
}
}
2 :-구성 클래스가 있으면 필요한 구성에서 변수를 주입하십시오.
@Component
public class YourService {
@Autowired
private String getUserBucketPath;
// now you have a value in getUserBucketPath varibale automatically.
}