[java] 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

userBucket.pathSpring 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( .ymlPOJO에도 지원됨).

다음 예제 파일을 고려하십시오.

.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>
  • PropertySouceEnvironment클래스가로드 될 때 속성 소스 파일의 값을 변수 (클래스 내)에 설정합니다. 그래서 당신은 쉽게 후문을 가져올 수 있습니다.
    • 시스템 환경 변수를 통해 액세스 할 수 있습니다.

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.
}