본문으로 건너뛰기

환경설정 값을 이용하는 @Value

@Value를 통해서 application.yml / application.properties 값을 이용해보자

application.yml / application.properties

abc:
dataSourceClassName: com.mysql.cj.jdbc.MysqlDataSource
serverName: xxx.xxx.com
port: 3306
databaseName: abc
username: abc-user
password: abc-password
maximumPoolSize: 5
catalog: abc
abc.dataSourceClassName=com.mysql.cj.jdbc.MysqlDataSource
abc.serverName=xxx.xxx.com
abc.port=3306
abc.databaseName=abc
abc.username=abc-user
abc.password=abc-password
abc.maximumPoolSize=5
abc.catalog=abc

위와 같이 yml 혹은 properties에 키 / 벨류 스타일로 값을 지정해준다.

실제 사용

그리고 자바 쪽에서는 이런식으로 사용한다.

@Value("${abc.dataSourceClassName}")
private String dataSourceClassName;

@Value("${abc.serverName}")
private String serverName;

@Value("${abc.port}")
private String port;

@Value("${abc.databaseName}")
private String databaseName;

@Value("${abc.username}")
private String username;

@Value("${abc.password}")
private String password;

@Value("${abc.maximumPoolSize}")
private int maximumPoolSize;

@Value("${abc.catalog}")
private String catalog;

@Component 로 빈 등록된 클래스 여야 null안뜨고 잘 작동함에 주의


@Value에 대해 좀더 알아보자

값을 주입

    @Value("Hello World")
private String greetingMessage;

이런식으로 하면 값을 주입하게 된다.

여러가지 타입 주입

@Value("1.234")
private double doubleValue; //could be Double

@Value("1234")
private Integer intValue; //could be int

@Value("true")
private boolean boolValue; //could be Boolean

@Value("2000")
private long longValue;

Default값을 설정

greeting.message의 값이 없을때 기본값으로 Greeting not found! 가 들어가게된다.

@Value("${greeting.message:Greeting not found!}")

List 형을 주입

@Value("${...}")

이런 properties값이 있을때

# application.properties
my.weekdays=Mon,Tue,Wed,Thu,Fri

이런식으로 넣는다.

@Value("${my.weekdays}")
private List<String> strList; // injects [Mon, Tue, Wed, Thu, Fri]

//Providing default value
@Value("${my.weekends:Sat,Sun,Fri}")
private List<String> strList2; // injects [Sat, Sun, Fri]

Map 형을 주입

@Value("#{${...}}")
# application.properties
database.values={url:'http://127.0.0.1:3306/', db:'mySql', username:'root', password:'root'}
@Value("#{${database.values: {url: 'http://127.0.0.1:3308/', db: 'mySql', username: 'root', password: ''}}}")
private Map<String, String> dbValues;