[Spring] 자바 스프링 프로퍼티(properties) 파일 데이터 가져오기

2022. 10. 27. 03:43·Back-End/Spring

프로퍼티(properties)란 응용 프로그램의 구성 가능한

파라미터를 저장하기 위해 자바 관련 기술을

사용하는 파일의 확장자입니다.

 

주로 스프링의 설정 정보를 저장한다고 합니다.

.properties의 각 줄은 일반적으로 하나의 값을 저장하고

key(문자열) = value 쌍 형식을 가집니다.

 

프로퍼티 파일에서 설정 값을 분리하면 얻을 수 있는 장점은

@Value 어노테이션을 효율적으로 사용할 수 있습니다.

 

@Value 어노테이션의 주요 용도는 자바 코드 외부의 리소스나

환경정보에 담긴 값을 사용하는 데 있습니다.

 

@Value는 소스코드 안에 포함되는 어노테이션이어서 값을 수정하면 매번 새로 컴파일 해야합니다.
하지만 @Value에서 프로퍼티 파일의 내용을 참조하게 해주면 소스코드의 수정 없이
@Value를 통해 프로퍼티에 주입되는 값을 변경할 수 있습니다.

출처:https://cornswrold.tistory.com/95

 


📝 XML을 이용해 properties 값 가져오기

 

 

⦁ 프로퍼티 파일 생성

✔ XML이 있는 경로에 프로퍼티 파일을 생성합니다.

 

⦁ XML 파일에서 불러오기

<?xml version="1.0" encoding="UTF-8"?>
<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"
	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-3.1.xsd">
	
	<!-- properties 경로-->
	<context:property-placeholder location="classpath:admin.properties" />
	
	<bean id="adminConnection" class = "com.company.day3.AdminConnection">
		<property name="adminId">
            <value>${admin.id}</value>
        </property>
        <property name="adminPw">
            <value>${admin.pw}</value>
        </property>
	</bean>

</beans>

 

✔ 네임 스페이스에 context, schemaLocation을 추가해야 합니다.

    <value> 태그에 ${프로퍼티 key}를 넣습니다.

 

⦁ 메인 클래스 실행

package com.company.day3;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
    public static void main(String[] args) {
        AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
        
        AdminConnection connection = ctx.getBean("adminConnection", AdminConnection.class);
        System.out.println("adminID : " + connection.getAdminId());
        System.out.println("adminPW : " + connection.getAdminPw());

        ctx.close();
    }
}

 

 

✔ 성공적으로 프로퍼티 값을 가져온 모습입니다.

 

 

⦁ 빈즈 소스코드

더보기
public class AdminConnection {
    private String adminId;
    private String adminPw;
    
    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }
    
    public void setAdminPw(String adminPw) {
        this.adminPw = adminPw;
    }
    
    public String getAdminId() {
        return adminId;
    }
    
    public String getAdminPw() {
        return adminPw;
    }

}

 


📝 Bean을 이용해 properties 값 가져오기

 

⦁ ApplicationConfig.java 파일 생성

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

@Configuration
public class ApplicationConfig {
 
    @Value("${admin.id}")  // 프로퍼티 값 가져오기
    private String adminId;
    @Value("${admin.pw}")   // 프로퍼티 값 가져오기
    private String adminPw;
    
    @Bean
    public static PropertySourcesPlaceholderConfigurer Properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        
        //프로퍼티 경로를 배열로 여러 개 가능
        Resource[] locations = new Resource[1];
        locations[0] = new ClassPathResource("admin.properties");
        configurer.setLocations(locations);
        
        return configurer;
    }

    @Bean  
    public AdminConnection adminConfig() {                            
        AdminConnection adminConnection = new AdminConnection();
        adminConnection.setAdminId(adminId);
        adminConnection.setAdminPw(adminPw);
        return adminConnection;
    }
}

 

✔ DI 어노테이션 방식으로 가져옵니다.  (https://hyunki99.tistory.com/65 참고)

 

❗ PropertySourcesPlaceholderConfigurer 클래스를 사용하지 않을 시 "${admin.id}"

  그대로 출력됩니다.

🤔PropertySourcesPlaceholderConfigurer란?

PropertySourcesPlaceholderConfigurer는 추상 클래스 PlaceholderConfigurerSupport를 구현한 클래스입니다.
PropertySource를 추가하여 @Value 어노테이션의 ${...} 부분에 프로퍼티 값을 주입해 줍니다.
Bean으로 등록해서 사용하며, PropertySource를 여러개 등록할 수 있습니다.
프로퍼티가 겹칠 땐 먼저 등록된 PropertySource의 프로퍼티가 우선순위를 가집니다.

출처 : https://stuffdrawers.tistory.com/6

 

 

⦁ 메인 클래스 실행

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
        AdminConnection connection = ctx.getBean("adminConfig", AdminConnection.class);
        
        System.out.println("adminID : " + connection.getAdminId());
        System.out.println("adminPW : " + connection.getAdminPw());

        ctx.close();
    }
}

 

 

 


 

 

 


참고 문헌 : 

 

https://cloud0477.tistory.com/64?category=856438

https://cornswrold.tistory.com/95

https://cloud0477.tistory.com/63?category=856438 

 

'Back-End > Spring' 카테고리의 다른 글

[Spring] 자바 스프링 AOP란?, AOP 개념 정리 (프록시, AspectJ)  (0) 2022.10.27
[Spring] 자바 스프링 한글 깨짐 해결 (filter)  (0) 2022.10.27
[Spring] DI(의존성 주입) @Configuration @Bean 어노테이션 사용방법  (0) 2022.10.26
[Spring] 스프링 프레임워크란?, 의존성 주입 방법 2가지 (IOC, DI, ApplicationContext 빈 가져오기)  (0) 2022.10.24
[Spring] 이클립스 자바 스프링 설치 방법  (0) 2022.10.24
'Back-End/Spring' 카테고리의 다른 글
  • [Spring] 자바 스프링 AOP란?, AOP 개념 정리 (프록시, AspectJ)
  • [Spring] 자바 스프링 한글 깨짐 해결 (filter)
  • [Spring] DI(의존성 주입) @Configuration @Bean 어노테이션 사용방법
  • [Spring] 스프링 프레임워크란?, 의존성 주입 방법 2가지 (IOC, DI, ApplicationContext 빈 가져오기)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    리액트 네이티브
    Java
    자바
    그리디
    React Native Chart
    파이썬
    자바스크립트
    오라클
    react-native-chart-kit
    React Native
    IS-A
    자바 스프링
    DI
    큐
    쓰레드
    JDBC
    서블릿
    next-intl
    Express
    react
    Python
    포스트맨
    REST API
    node.js
    스택
    오블완
    상속
    Spring
    JSP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Spring] 자바 스프링 프로퍼티(properties) 파일 데이터 가져오기
상단으로

티스토리툴바