[SpringBoot] Properties - Map 순서 이슈

HyeJin Jeon·2023년 11월 9일
0
post-thumbnail

문제 상황

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
my.servers[2]=dev.bar.com
my.servers[3]=foo.bar.com
my.servers[4]=dev.bar.com
my.servers[5]=foo.bar.com
my.servers[6]=dev.bar.com
my.servers[7]=foo.bar.com
my.servers[8]=foo.bar.com
my.servers[9]=foo.bar.com
my.servers[10]=foo.bar.com

Spring Boot 에서 Map properties 를 가져올 때, Java 클래스에서는 Map<String, Object> 자료형으로 받아온다.
이 때, Key 값이 String 자료형 이므로 0-1-2-...-10 순서로 가져오는 것이 아닌 '0'-'1'-'10'-'2'-...'9' 순서로 가져오게 된다.

의도한 순서와 어긋나기 때문에 순서가 중요한 property 의 경우 문제 상황이 발생한다.

해결 방안 1

my.servers[00]=dev.bar.com
my.servers[01]=foo.bar.com
my.servers[02]=dev.bar.com
my.servers[03]=foo.bar.com
my.servers[04]=dev.bar.com
my.servers[05]=foo.bar.com
my.servers[06]=dev.bar.com
my.servers[07]=foo.bar.com
my.servers[08]=foo.bar.com
my.servers[09]=foo.bar.com
my.servers[10]=foo.bar.com

String 자료형의 sort 순서에 맞게 Key 값을 조정한다.

해결 방안 2

*.properties

# primitive 자료형
my.servers=dev,foo,bar

# primitive 자료형, multiline
my.servers=dev\n
           foo\n
           bar

# object 자료형
my.servers=[{id=foo, name=foo server}, {id=bar, name=bar server}, {id=dev, name=dev server}]

.yaml

my:
	servers:
		- 
			id: foo
			name: foo server
		-
			id: bar
			name: bar server
		-
			id: dev
			name: dev server

순서가 중요한 property 는 Array 로 받아온다.

profile
Backend Developer

0개의 댓글