00. properties란?

 

Spring에서의 "properties"는 주로 설정 정보를 담고 있는 외부 파일로 사용됩니다. 이 파일은 일반적으로 .properties 확장자를 가지며, 키-값 쌍으로 구성되어 있습니다. 이러한 외부 properties 파일은 Spring 애플리케이션의 설정을 관리하고, 런타임 시에 애플리케이션의 동작을 조정하는 데 사용됩니다.

Spring에서 properties 파일을 사용하는 주요 목적은 다음과 같습니다:

 

     1.환경 변수 설정: 데이터베이스 연결 정보, 서버 URL, 포트 번호 등과 같은 환경 변수를 외부 파일에 저장하여 유지 관리합니다.

     2.애플리케이션 설정: 로그 레벨, 메시지 리소스 경로, 캐시 크기 등과 같은 애플리케이션 설정을 외부 파일에 저장하여 관리합니다.

     3.국제화 및 로컬라이제이션: 다국어 지원을 위해 메시지 번들을 properties 파일로 저장하고 로드하여 사용합니다.

     4.빈 설정: Spring 빈의 속성을 외부 properties 파일로부터 주입하여 런타임 시에 빈을 구성합니다. 

 

 

(출처-ChatGPT)

 

 

 

 

01. Bean Externalization or Reading Properties

 

가. 개념: 외부에 저장된 설정파일을 이용하기 때문에 변경이 발생해도 재컴파일X

 

 

나. 구현 방법

 

 

 

 

다. 구현 예시

 

 

 

 

 

 

 

 

 

02. BeanDefinitionStoreException

가. 구현 방법 (전체구성)

사용

pakages : com.kitri.spring.Properties

class : MyDao.java

             Properties.java

File : database.properties

xml : Properties.xml

 

 

 

 

 

나. 구현 코드(전체코드)

 

 

 

 

 

 

다. 실행결과

 

 

 

 

 

 

 

03. 응용버전(과제)

가. 구현 방법

 

 

 

 

나. 구현 방법 (전체구성)

사용

pakages : com.kitri.spring.Properties.ex1

class : MyDao.java

             Properties.java

File : database.properties2

xml : Properties.ex1.xml

 

 

 

 

 

 

다. 구현

 

- MaDao.java

 

package com.kitri.spring.Properties.ex1;

public class MyDao {
	private String url;
	private String userName;
	private String Password;

	public MyDao() {}

	public MyDao(String url, String userName, String Password) {
		this.url = url;
		this.userName = userName;
		this.Password = Password;
	}

	@Override
	public String toString() {
		return "URL: " + url + ", userName: " + userName + ", Password: " + Password;
	}
}

 

이 클래스는 데이터베이스 연결 정보를 관리하는 데 사용될 수 있습니다. 객체를 생성할 때 데이터베이스의 URL, 사용자 이름 및 비밀번호를 설정하고, toString() 메서드를 사용하여 연결 정보를 문자열로 출력할 수 있습니다.

 

 

 

 

- Properties .java

package com.kitri.spring.Properties.ex1;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Properties {

	public static void main(String[] args) {
		// 스프링 컨테이너 생성
		ClassPathXmlApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
				"classpath:Properties.ex1.xml");

		// 빈 객체 사용
		MyDao myDao = (MyDao)ctx.getBean("mydao");
		System.out.println(myDao);
		
		// 스프링 컨테이너 종료
		ctx.close();
		
	}

}

 

이 코드는 스프링 애플리케이션 컨텍스트를 생성하고 XML 파일을 사용하여 설정된 빈 객체를 가져와서 사용하는 것입니다. 빈 객체는 처음에 만들어놓은 Dao.java 클래스가 실행되어 출력됩니다.

 

 

 

 

- Properties.ex1.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:c="http://www.springframework.org/schema/c"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	
	<context:annotation-config />
	
	<!-- 외부 properties 파일로부터 설정 값 로드 -->
	<context:property-placeholder location="classpath:database.properties2" />
	
	<!-- MyDao 빈 정의 -->
	<bean name="mydao" class="com.kitri.spring.Properties.ex1.MyDao"
		c:url="${url}"
		c:userName="${userName}"
		c:Password="${Password}" />
</beans>

 

 

이 설정 파일은 외부 properties 파일을 사용하여 MyDao 빈을 정의하고, 해당 빈에 필요한 설정 값을 주입하는 데 사용됩니다.

 

 

 

 

- database.properties2.File

 

 

url=xyz
#The default port
dbPort=1521
#user Name/Password
userName=test
Password=test

 

Spring 애플리케이션은 이러한 properties 파일을 사용하여 데이터베이스 연결 등의 설정 정보를 외부에서 로드하고, 애플리케이션 컨텍스트에서 이 정보를 사용하여 빈(bean)을 구성합니다.

 

 

라. 실행결과

 

자 이제 실행결과를 똿!! 해서 결과를 확인해 본 결과 오잉..? 분명 database.properties2.File 에서 userName을 test 로 설정했는데 다른 결과값이 출려되었다... 이럴수가....오류를 분석해보자 (흑흑..)

 

 

 

+ 수정 및 새롭게 알아낸 사실~~~

 

 

 

확인한결과 cmd에서 echo 명령어를 이용하여 userName의 커맨드값을 확인해본결과 다른 값이 저장되어있었다.!!! 그래서 아무래도 userName이라는 문자열을 사용하면 출력되었던것같다.!!! (이전실습과정에서 이렇게 된것같다 하하;;) 

 

 

 

호다닥 문자열이름을 Name으로 바꾸고 다시 출력해본결과..

 

 

 

정상적으로 결과값이출력되었다.. 새로운 사실을 알게되어서 좋았던 실습이다 

 

2024. 4. 18. 14:17