[SPRING] application.properties에서 값 읽기 Spring Boot
SPRINGapplication.properties에서 값 읽기 Spring Boot
내 스프링 부팅 응용 프로그램에는 다음 응용 프로그램 구조가 있습니다.
이것은 내 application.properties 파일입니다.
logging.level.org.springframework=TRACE
logging.level.org.hibernate=ERROR
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
#spring.resources.chain.cache=false
#spring.resources.chain.html-application-cache=false
#spring.headers.cache=false
language=java
그 언어 = 자바 속성을 사용해야하는 클래스가 있습니다. 이것은 그것을 사용하려고하는 방법입니다 :
public class EntityManager {
@Value("${language}")
private static String newLang;
public EntityManager(){
System.out.println("langauge is: " + newLang);
}
}
그 인쇄 된 값은 어떤 이유로 든 항상 "null"입니다! 나는 이것을 클래스 선언의 맨 위에 넣으려고했다.
@PropertySource(value = "classpath:application.properties")
해결법
-
==============================
1.여러 가지 방법으로 달성 할 수 있습니다. 아래를 참조하십시오.
여러 가지 방법으로 달성 할 수 있습니다. 아래를 참조하십시오.
@Configuration @PropertySource("classpath:application.properties") public class EntityManager { @Value("${language}") private static String newLang; @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); } }
또는
@Configuration @PropertySource("classpath:application.properties") public class EntityManager { @Autowired private Environment env; public void readProperty() { env.getProperty("language"); } }
-
==============================
2.스프링 부트를 사용하고 있다면 스프링 부트 스타터 부모를 사용하는 경우 @PropertySource ( "classpath : application.properties")가 필요하지 않습니다. 정적 키워드 만 제거하면 작동이 시작됩니다.
스프링 부트를 사용하고 있다면 스프링 부트 스타터 부모를 사용하는 경우 @PropertySource ( "classpath : application.properties")가 필요하지 않습니다. 정적 키워드 만 제거하면 작동이 시작됩니다.
-
==============================
3.때때로 src / main / resources의 classpath 항목에 exclude 태그가 포함되어 있습니다. application.properties가이 제외 된 항목 목록에 있으면 @PropertySource ( "classpath : application.properties")는 등록 정보 파일을 찾을 수 없습니다.
때때로 src / main / resources의 classpath 항목에 exclude 태그가 포함되어 있습니다. application.properties가이 제외 된 항목 목록에 있으면 @PropertySource ( "classpath : application.properties")는 등록 정보 파일을 찾을 수 없습니다.
src / main / resources에 대한 [.classpath] [1] 파일에서 exclude 항목을 수동으로 제거하거나 Eclipse에서 빌드 경로 구성 옵션을 사용하여 소스 탭으로 이동하십시오. 그런 다음 src에서 제외 항목을 제거하십시오.
-
==============================
4.클래스 상단에 스테레오 타입 주석이 없습니다.
클래스 상단에 스테레오 타입 주석이 없습니다.
@Component public class EntityManager { @Value("${language}") private static String newLang; public EntityManager(){ System.out.println("langauge is: " + newLang); } }
-
==============================
5.OK 나는 그것을 필사적으로 생각했다. 나는
OK 나는 그것을 필사적으로 생각했다. 나는
@PropertySource("classpath:application.properties")
속성이지만 여전히 어떤 이유로 작동하지 않았습니다.
그런 다음 "정적"수정자를 삭제하고 효과가있었습니다!
왜 거기에 "정적"없이 작동하는지 모르겠지만 그렇습니다. 이것이 나에게 설명 할 수 있다면 그것은 모두 혼란 스럽기 때문에 멋질 것입니다.
-
==============================
6.콩 만들기
콩 만들기
@Configuration @PropertySource("classpath:application.properties") public class ApplicationBeansConfig { @Autowired Environment env; @Bean public IApplicationBeanService getService(){ return new ApplicationBeansService(env); } }
그리고 나서 서비스 생성자에서
@Service public class ApplicationBeansService implements IApplicationBeanService { ... public ApplicationBeansService(Environment env){ ... String value = env.getProperty("your.value") ... } ... }
application.properties를 채우는 것을 잊지 마십시오.
your.value = some-string-value
-
==============================
7.위의 두 번째 대답에서 제공된 것처럼 실제로 스프링 부트를 사용 했으므로 static 키워드를 제거하고 해결했습니다. @Value로 정의 된 속성에 정적이 없는지 확인하십시오.
위의 두 번째 대답에서 제공된 것처럼 실제로 스프링 부트를 사용 했으므로 static 키워드를 제거하고 해결했습니다. @Value로 정의 된 속성에 정적이 없는지 확인하십시오.
-
==============================
8.@PropertySource를 사용하여 속성 파일의 경로를 지정하면 아래 예제를 찾을 수 있습니다.
@PropertySource를 사용하여 속성 파일의 경로를 지정하면 아래 예제를 찾을 수 있습니다.
@Component @PropertySource("classpath:application.properties") public class EntityManager { @Value("${language}") private static String newLang; public EntityManager(){ System.out.println("langauge is: " + newLang); } }
-
==============================
9.아마도 당신이 찾고있는 정확한 해결책이 아닐지 모르지만 프로퍼티 소스 빈을 선언 할 수도 있습니다 :
아마도 당신이 찾고있는 정확한 해결책이 아닐지 모르지만 프로퍼티 소스 빈을 선언 할 수도 있습니다 :
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html
-
==============================
10.내 경우에는 같은 문제가 약간 다른 원인이있다 - 나는 정적 인 인스턴스 변수 (우리가 Singleton 패턴을 구현하는 데 사용했던 예전의 일반적인 방법)를 가진 클래스를 갖고 있는데,이 클래스에 application.properties "정적"문제는 속성을 찾을 수없는 이유였습니다 - 아무런 오류도 없었습니다 : /).
내 경우에는 같은 문제가 약간 다른 원인이있다 - 나는 정적 인 인스턴스 변수 (우리가 Singleton 패턴을 구현하는 데 사용했던 예전의 일반적인 방법)를 가진 클래스를 갖고 있는데,이 클래스에 application.properties "정적"문제는 속성을 찾을 수없는 이유였습니다 - 아무런 오류도 없었습니다 : /).
게다가이 클래스는 @SpringBootApplication으로 선언 된 클래스와 완전히 다른 패키지에 있습니다. 나는 Spring Boot와 자동 컴포넌트 스캐닝을 통해 패키지 이름과 위치를 진지하게 고려해야한다는 것을 이해했다. 내 5 센트
from https://stackoverflow.com/questions/45428826/reading-values-from-application-properties-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 세션 + 봄 웹 소켓. 세션 ID를 기반으로 특정 클라이언트에게 메시지 보내기 (0) | 2019.05.14 |
---|---|
[SPRING] Spring WS 웹 서비스. SAAJ를 사용하여 응답에 첨부 파일 추가 - 엔드 포인트 용 어댑터 없음 (0) | 2019.05.14 |
[SPRING] Spring 부트를 EAR 프로젝트에 통합 (0) | 2019.05.14 |
[SPRING] Spring - JPA - 작업을 읽지 만 계속 유지합니다. 사용할 수있는 트랜잭션 EntityManager가 없습니다. 왜? (0) | 2019.05.14 |
[SPRING] sql prepared statement, spring, SimpleJDBCTemplate에서 LIKE 절 사용 (0) | 2019.05.14 |