[Spring] properties_사용하기(외부 프로퍼티)

Posted by 김성철

properties 사용하기

참고 URL :  
	https://ktko.tistory.com/entry/Spring-properties-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0  

##Properties 설정

WEB-INF 경로에 텍스트 파일을 생성하여서 이름을 변경  
ex) 원하는이름.prooperties  
    config.properties  
  
경로 : webapp₩WEB-INF₩config₩config.properties  

config.properties 내용 기재

config.properties 에서 사용할 설정들 및 메시지들을 기재   ================================================================================================================================================  
  
##### Mysql DB Info ####  
  
##Dev  
db.driver = com.mysql.jdbc.Driver  
db.url = jdbc:mysql://127.0.0.1:3306/ssologin03?useSSL=false&serverTimezone=UTC  
db.username=securus  
db.password=securus1234  
  
##Prod  
  
##db.driver = com.mysql.jdbc.Driver  
##db.url = jdbc:mysql://127.0.0.1:3306/ssologin03?useSSL=false&serverTimezone=UTC  
##db.username=securus  
##db.password=securus1234  

================================================================================================================================================

Spring bean 에 properties 등록 - 하나의 프로퍼티 파일 사용

applicationContext.xml 에 하단의 내용 등록  

================================================================================================================================================

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
	<property name="location" value="WEB-INF/config/config.properties"/>  
	<property name="fileEncoding" value="UTF-8"/>  
    </bean>  

================================================================================================================================================

Spring bean 에 properties 등록 - 하나 이상의 프로퍼티 파일 사용

applicationContext.xml 에 하단의 내용 등록  

================================================================================================================================================

<!--properties 파일 사용을 위한 경로 설정 및 인코딩 타입 정의-->  
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <property name="locations">  
            <list>  
				<value>/WEB-INF/config/dataBase.properties</value>  
                <value>/WEB-INF/config/base.properties</value>  
                <value>/WEB-INF/config/messages_kr.properties</value>  
                <value>/WEB-INF/config/messages_en.properties</value>  
            </list>  
    </property>  
    <property name="fileEncoding" value="UTF-8"/>  
</bean>  

================================================================================================================================================

xml 등의 설정파일에서 사용할 때

${properties파일에서 선언한 변수명}  
${db.driver}  
  
ex)  
	    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
	        <property name="driverClassName" value="${db.driver}"/>  

스프링에서 사용할 때

사용하려는 컨트롤러 상단에 선언  
@Value("${db.driver}")  
String dbdriver;  

================================================================================================================================================
@Controller
public class MainController {

@Autowired  
MainServiceImpl mService;  
  
@Value("${db.driver}")  
String dbdriver;  

================================================================================================================================================

JPS 파일에서 사용할 때

※ 해당 내용을 진행할 때 한글로 작성한 경우, JSP 페이지에서 한글로 표시되지않고 유니코드로 표시됨  
그래서 작성시에  
프로퍼티파일에서 유니코드로 작성해놔야 웹페이지에 표시될 때 한글로 표시가 됨  
  
applicationContext.xml 파일을 열어서 namespace를 추가  
  
xmlns:util="http://www.springframework.org/schema/util"  
  
xsi:schemaLocation="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"  
  • 추가 후 모습

================================================================================================================= * 하단부분에 <util 태그를 사용하여서 등록 id는 해당 프로퍼티파일을 불러올때 사용할 이름 location은 해당 프로퍼티 파일의 경로 ================================================================================================================= ================================================================================================================= JSP 파일에서의 사용 페이지 상단에 태그라이브러리 추가 ================================================================================================================= <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> ================================================================================================================= 사용할 위치에서 util 에서 지정한 id, 해당 프로퍼티파일내에서 설정한 이름으로 불러옴 =================================================================================================================
================================================================================================================= messages_kr.properties 파일에 테스트로 작성한 내용 ================================================================================================================= error=₩uC624₩uB958₩uAC00 ₩uBC1C₩uC0DD₩uD558₩uC600₩uC2B5₩uB2C8₩uB2E4. test=abcdefgh12345 ================================================================================================================= ## 설정파일로 사용 할 때 NULL 값이 나오는 경우 properties 파일에 있는 설정값들을 bean 들이 초기화 될때 사용하기, * properties 의 실행순서는 스프링에서 제일 마지막쯤임 * service 안에서 @Value 를 쓰면 @service 객체가 먼저 초기화 된 뒤에 @Value 값이 초기화되서 null 값이 나옴 ※ 삽질한 내용 서비스에 아래의 어노테이션 사용 @dependson - 안됨 @property - 안됨 스프링설정파일에 순서 변경 (위에서 아래로니까 프로퍼티를 젤위로) - 안됨 실행 순서를 줄수 있나 확인 - 안됨 (사실잘모르겟음 ) * 조치 방안 아래와 같이 @PostConstruct 어노테이션을 주어서, bean의 의존성 주입이 다 끝난후에 다시 초기화를 시킴 ===================================================================================================================================================== @PostConstruct public void init(){ namespace = namespace+".mainMapper"; } ===================================================================================================================================================== 조치 소스 ===================================================================================================================================================== @Value("${db.namespace}") private String namespace; @PostConstruct public void init(){ namespace = namespace+".mainMapper"; } =====================================================================================================================================================