Properties
애플리케이션의 구성 가능한 파라미터들을 저장하기 위해 자바 관련 기술을 주로 사용하는 파일들의 파일확장자이다. 각 파라미터는 문자열들의 일부로 저장돠며, 한 문자열은 파라미터의 이름을 키값으로 저장하며 다른 하나는 밸류로써 저장한다. (위키피디아)
.Properties Format
key = value
key=value
key : value
- 프로퍼티 파일 만들고 설정
- 프로퍼티 파일을 servlet-context.xml 에 등록
1 2 3 | <util:properties id="user" location="classpath:/props/user.properties" /> | cs |
properties 파일을 사용하고, 해당 프로퍼티 파일의 id 는 user 이다. classpath 는 해당 프로젝트가 classpath 로 잡아놓은 경로를 기점으로 /props/user.properties 로 가겠다는 의미로 아래의 경로를 따른다. user.properties 가 위치해있는 파일 경로이다.
Properties 파일 사용1 : @Value 애노테이션 이용
자바 소스 내부에서 아래와 같이 작성을 할 수 있다. @Value("#{user['key']}) "user" 를 쓸 수 있는 이유는 servlet-context.xml 에서 프로퍼티 파일을 이용하겠다고 설정해주었기 때문이다. 따라서 프로퍼티의 키 값에 의해 밸류를 해당 변수에 삽입할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Value("#{user['pasudo123.id']}") String pasudo123Id; @Value("#{user['pasudo123.pw']}") String pasudo123Pw; @Value("#{user['pasudo123.address']}") String pasudo123Addr; @Value("#{user['doubler.id']}") String doublerId; @Value("#{user['doubler.pw']}") String doublerPw; @Value("#{user['doubler.address']}") String doublerAddr; | cs |
출력과 결과문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | private void displayOnConsole(){ System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); System.out.println("pasudo123Id : " + pasudo123Id); System.out.println("pasudo123Pw : " + pasudo123Pw); System.out.println("pasudo123Addr : " + pasudo123Addr); System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); System.out.println("doublerId : " + doublerId); System.out.println("doublerPw : " + doublerPw); System.out.println("doublerAddr : " + doublerAddr); System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); } [ 출력 ] ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ pasudo123Id : pasudo123 pasudo123Pw : pasudopass pasudo123Addr : KOREA ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ doublerId : doubler doublerPw : doublerpass doublerAddr : USA ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ | cs |
Properties 파일 사용2 : @Component & @Autowired 이용
우선 아래와 같이 @Autowired 애노테이션을 componentTest 변수에 걸어준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class PropController { @Autowired ComponentTest componentTest; @RequestMapping("/props") public String printProps(){ componentTest.autowiredPrint(); return "testViews/prop"; } } | cs |
ComponentTest Class 에 @Component 애노테이션을 달아주고 인스턴스 변수는 프로퍼티 타입의 user 라고 명시한다. 여기서 주의할 것은 user 라고 명시한 변수 명이 servlet-context.xml 에 명시한 id 값과 동일해야 한다는 것이다. 동일하지 않으면 injection Error 가 뜬다.
위의 과정이 완료되면 프로퍼티 변수의 getProperty() 의 메소드를 가지고 키 값을 입력 후 밸류 값을 획득한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class ComponentTest { @Autowired private Properties user; private String getValue(String key){ return user.getProperty(key); } public void autowiredPrint(){ System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); System.out.println("pasudo123Id : " + getValue("pasudo123.id")); System.out.println("pasudo123Pw : " + getValue("oracle.url")); System.out.println("pasudo123Addr : " + getValue("pasudo123.address")); System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); System.out.println("doublerId : " + getValue("doubler.id")); System.out.println("doublerPw : " + getValue("doubler.pw")); System.out.println("doublerAddr : " + getValue("doubler.address")); System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ"); } } [ 출력 ] ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ pasudo123Id : pasudo123 pasudo123Pw : pasudopass pasudo123Addr : KOREA ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ doublerId : doubler doublerPw : doublerpass doublerAddr : USA ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ | cs |
Properties 파일 사용3 : @Resource 애노테이션 이용
아까와 동일한 컨트롤러 레이어 쪽이다. @Autowired 를 통해서 해당 클래스에 대한 의존성 주입을 실시하고 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class PropController { @Autowired ComponentTest componentTest; @RequestMapping("/props") public String printProps(){ componentTest.ResourcePrint(); return "testViews/prop"; } } | cs |
@Resource 애노테이션을 이용하여 name 값을 servlet-context.xml 에 명시한 id 값으로 넣어주고 있다. 이후에 해당 프로퍼티 파일의 entrySet() 메소드를 통해 전체 셋을 획득한다. 이렇게 한다면 해당 프로퍼티 파일의 모든 키 밸류 값들을 가지고 올 수 있다. 따라서 출력은 전체 화면상으로 나타나게 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import java.util.Iterator; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; import javax.annotation.Resource; import org.springframework.stereotype.Component; @Component public class ComponentTest { @Resource(name="user") private Properties userProps; public void ResourcePrint(){ Set<Entry<Object, Object>> set = userProps.entrySet(); Iterator<Entry<Object, Object>> it = set.iterator(); while(it.hasNext()){ Entry<Object, Object> entry = it.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); } } } [ 출력 ] doubler.id : doubler oraedoa.id : oraedoa pasudo123.pw : pasudopass oraedoa.address : JAPAN pasudo123.id : pasudo123 doubler.address : USA pasudo123.address : KOREA doubler.pw : doublerpass oraedoa.pw : oraedoapass | cs |
servlet-context.xml 내에서 프로퍼티 파일의 사용
실질적으로 프로퍼티 파일은 설정파일이다. 설정파일을 코드상으로 관리한다면 보안상 노출위험도 있을 뿐더러 이후에 수정을 하는 경우 불필요한 소스코드의 수정을 가하기 때문에 따로 보관해둘 필요가 있다. 일반적인 예시로는 프로퍼티 파일의 경우 디비와 접속하는 경우 해당 디비 접속을 위한 경로, 아이디, 패스워드를 하드코딩하지 않은채 프로퍼티 파일로 이용하는 경우가 있다고 한다.
servlet-context.xml 모습
1 2 3 4 5 6 7 8 9 10 11 | <util:properties id="props" location="classpath:/props/config.properties" /> <!-- local Database --> <beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <beans:property name="driverClassName" value="#{props['oracle.driverClassName']}" /> <beans:property name="url" value="#{props['oracle.url']}" /> <beans:property name="username" value="#{props['oracle.username']}" /> <beans:property name="password" value="#{props['oracle.password']}" /> </beans:bean> | cs |
config.properties 파일 내부
1 2 3 4 5 6 7 | ## ORACLE ## oracle.driverClassName=oracle.jdbc.driver.OracleDriver oracle.url=jdbc:oracle:thin:@localhost:1521:xe oracle.username=doubler oracle.password=doublerpass | cs |
+) 추가
.properties 에 한글을 입력하면 한글이 깨진다.
따라서 이클립스 properties editor 를 다운받아 깨지는 현상을 해결한다.
'Spring' 카테고리의 다른 글
20190826 리버스 프록시 & nginx 이용 무중단배포 [여러가지 용어들] (0) | 2019.08.26 |
---|---|
20190530 Server-Sent-Events (8) | 2019.06.05 |
20180622 Spring Security (0) | 2018.06.22 |
20180620 스프링 인터셉터 사용기. (0) | 2018.06.20 |
20180408 패키지 구성 방법 두가지 (0) | 2018.04.08 |