Spring properties(프로퍼티) 값 가져오도록 설정

2019. 12. 18. 21:083_개발/3_1_JAVA

요즘 sts를 써서 이 방법을 많이들 안 쓰지만,

그래도 sts를 안 쓰는 경우에는 많이들 사용하는 방법이다.

 

1. xml 설정(web.xml에서 선언한 servlet 관련 xml 파일)

 

- 상단 bean에 util을 사용할 것이라고 선언 필요

<beans xmlns="http://www.springframework.org/schema/beans"
	...
	xmlns:util="http://www.springframework.org/schema/util"
	...
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
	...
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
..">

- xml 파일 내의 선언

<util:properties id="호출할 이름" location="classpath:/임의의 경로/설정파일.properties"/>

ex) 데이터 베이스에 대한 내용을 선언할 경우

<util:properties id="db" location="classpath:/config/db.properties"/>

2. properties 파일

db.properties

#db DriverClassName
jdbc.DriverClassName=com.mysql.jdbc.Driver
#db 접속 url
jdbc.Url=jdbc:mysql://127.0.0.1:3306/dbname
#db id
jdbc.UserId=user
#db 비밀번호
jdbc.Pw=1234

이런 식으로 선언 가능하다.

(참고로 properties 내에서 #은 주석을 의미한다.)

 

3. properties 값을 xml내부에서 불러오는 경우

<property name="driverClassName" value="#{xml에서 선언해 준 이름['properties 파일 내에 선언해 준 이름']}" />
<property name="driverClassName" value="#{db['jdbc.DriverClassName']}" />

 

4. java 파일 내부에서 properties 값을 가져오는 경우

@Value("#{xml에서 선언해 준 이름 ['properties 파일 내에 선언해 준 이름']}")
private String java소스 내에서 사용할 변수명;


@Value("#{db['jdbc.Url']}")
private String jdbcUrl;

이럴 경우 당연한 말이지만 해당 class에 아래와 같은 내용을 추가해 줘야 한다.

import org.springframework.beans.factory.annotation.Value;

 

 

다만 Value 어노테이션을 사용 가능한 곳은

 

1. 해당 클래스가 최소 @Component 이상 선언이 되어 있어야 한다.

2. static 클래스는 사용 불가능하다.

3. static 변수도 사용 불가능하다.

ex)  public static String jdbcUrl;