[SPRING] @PropertySource 및 UTF-8 특성 파일
SPRING@PropertySource 및 UTF-8 특성 파일
@PropertySource 어노테이션을 사용하여 속성 파일을로드하는 데 사용되는 인코딩을 구성 할 수 있습니까?
내 문제를 명확히하는 예
@Configuration
@PropertySource("classpath:/myprop.properties")
public class MyApplicationContext {
@Autowired(required = true)
private Environment env;
@Bean
public MyBean myBean() {
return new MyBean(env.getRequiredProperty("application.name"));
}
}
myprop.properties는 aUTF-8 파일이지만 "application.name"은 ISO-8859-1로 해석됩니다.
해결 방법은 속성 파일에서 특수 문자를 이스케이프 처리하는 것이지만 인코딩을 설정하는 것은 이전 컨텍스트에서 가능합니다 : property-placeholder 그래서 @PropertySource와 동일한 작업을 수행 할 수 있어야한다고 생각합니다.
해결법
-
==============================
1.이제 가능합니다 :
이제 가능합니다 :
@PropertySource (값 = "classpath : /myprop.properties", 인코딩 = "UTF-8")
-
==============================
2..properties 파일은 정의에 따라 ISO-8859-1로 인코딩됩니다. 그래서 네가 그렇게 할 수없는 것 같아.
.properties 파일은 정의에 따라 ISO-8859-1로 인코딩됩니다. 그래서 네가 그렇게 할 수없는 것 같아.
그러나 \ uXXXX 유니 코드 이스케이프를 사용하여 원하는 유니 코드 문자를 나타낼 수 있습니다. (약간 잘못 명명 된) native2ascii 도구는 자동으로 그렇게 할 수 있습니다.
-
==============================
3.@PropertySource와 context : property-placeholder는 완전히 다른 두 가지 구성 요소입니다. @PropertySource는 @Configuration 클래스를로드하는 ApplicationContext 및 Environment에 .properties 파일을 등록하고 context : property-placeholder는 PlacePlaceholderConfigurer 또는 PropertySourcesPlaceholderConfigurer bean을 등록하여 자리 표시 자 확인을 수행합니다. 이 bean은 함께 선언 된 .properties 파일의 등록 정보와 포함 된 환경에서 사용 가능한 등록 정보에 대한 액세스 권한을 갖습니다.
@PropertySource와 context : property-placeholder는 완전히 다른 두 가지 구성 요소입니다. @PropertySource는 @Configuration 클래스를로드하는 ApplicationContext 및 Environment에 .properties 파일을 등록하고 context : property-placeholder는 PlacePlaceholderConfigurer 또는 PropertySourcesPlaceholderConfigurer bean을 등록하여 자리 표시 자 확인을 수행합니다. 이 bean은 함께 선언 된 .properties 파일의 등록 정보와 포함 된 환경에서 사용 가능한 등록 정보에 대한 액세스 권한을 갖습니다.
@PropertySource에 사용 된 인코딩에 대해 수행 할 수있는 작업은 없습니다. 시스템 기본값을 사용합니다.
항상 PropertySourcesPlaceholderConfigurer 빈을 정적 (정적 @Bean 메소드로) 선언하고, 일부 .properties 파일과 인코딩을 선언 할 수 있습니다. 그러나 이러한 속성은 환경을 통해 사용할 수 없습니다.
-
==============================
4.내 솔루션 :
내 솔루션 :
새로운 MyBean (새로운 String (env.getProperty ( "application.name"). getBytes ( "ISO-8859-1"), "UTF-8"));
-
==============================
5.또는 setEncoding 메소드가있는 PropertiesFactoryBean을 사용할 수 있습니다. 여기 내 프로젝트 중 하나의 예제
또는 setEncoding 메소드가있는 PropertiesFactoryBean을 사용할 수 있습니다. 여기 내 프로젝트 중 하나의 예제
@Bean public PropertiesFactoryBean cvlExternalProperties() { PropertiesFactoryBean res = new PropertiesFactoryBean(); res.setFileEncoding("UTF-8"); res.setLocation(new ClassPathResource("conf/external-test.properties")); return res; }
다음 표기법을 사용하여 프로젝트에서 사용할 수 있습니다.
@Value("#{cvlExternalProperties['myProperty']}") private String p;
-
==============================
6.예고편 :
예고편 :
다른 프로젝트 클래스의 다른 기능으로 @PropertySource를 정의하면 예상치 못한 결과가 발생할 수 있습니다.
예를 들면
클래스 A :
@PropertySource(value = "classpath:/myprop.properties", encoding="UTF-8")
클래스 B에있는 동안 :
@PropertySource(value = "classpath:/myprop.properties")
클래스 B의 주석은 클래스 A를 대체 할 수 있으며이 경우 클래스 A의 인코딩은 무효화됩니다.
from https://stackoverflow.com/questions/25325892/propertysource-and-utf-8-properties-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 컨트롤러에서 JAXB 및 Spring @ResponseBody를 사용하여 올바른 사이트 맵 네임 스페이스를 생성하는 방법은 무엇입니까? (0) | 2019.02.23 |
---|---|
[SPRING] 커스텀 cxf 인터셉터에서 Spring Autowired를 사용하는 방법? (0) | 2019.02.23 |
[SPRING] Spring에서 config 속성을 삽입하는 방법 Spring에서 다시 시도 주석을 재 시도 하시겠습니까? (0) | 2019.02.23 |
[SPRING] SQL Server에서 날짜 추출 문제 (0) | 2019.02.23 |
[SPRING] 스프링 플럭스에 대한 HATEOAS / Mono response (0) | 2019.02.23 |