Prologue
-
Spring Boot 프로젝트에서
DB 연동하는 방법에 대해 알아본다.
이 중 마음에 드는 방법으로 설정하면 된다.
Common Property
db.yml
db:
url: jdbc:mysql://xxx:3306/HelloGoodGid
username: hello
password: goodGid
driver-class-name: com.mysql.cj.jdbc.Driver
- 기본적으로 DB 연동에 필요한 정보들은 따로 파일로 관리한다.
DB Config Setting
첫 번째 방법
-
대부분 많이 사용하는 방식일 텐데
application.yml에 DB Property 값을 설정해주는 방법이다.
application.yml
spring:
datasource:
url: ${db.url}
username: ${db.username}
password: ${db.password}
driver-class-name: ${db.driver-class-name}
-
주의할 점은
application.yml에는 DB 정보뿐만 아니라
다른 설정들이 들어가서 public 하게 Open이 되어있다.
-
그런 파일에 DB 정보를 노출하면 안 되니
DB 정보는 따로 관리를 해주는 게 안전하다.
그래서 필자는 db.yml에 있는 값을 참조해서 매핑이 될 수 있도록 하였다.
-
하지만 슬프게도
그냥 db.yml 값을 참조할 순 없고 추가적인 설정이 필요하다.
그 방법으로는 Custom *.yml 사용 글을 참고하자 !
두 번째 방법
DataSourceConfig
@Configuration
public class DataSourceConfig {
@Value("${db.url}")
private String url;
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Value("${db.driver-class-name}")
private String driverClassName;
@Bean
public DataSource datasource() {
return DataSourceBuilder.create()
.url(url)
.username(username)
.password(password)
.driverClassName(driverClassName)
.build();
}
}
- application.yml가 아닌 Java 파일로 DB 정보를 관리한다.
세 번째 방법
DataSourceConfig
@Configuration
@PropertySource("classpath:xxx/yyy/application-${spring.profiles.active}.yml") // [1]
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource") // [2]
public DataSourceProperties primaryDataSourceProperties() { // [3]
DataSourceProperties sourceProperty = new DataSourceProperties();
return sourceProperty;
}
// [4]
@Bean
@Primary
@Qualifier("primaryDataSource")
public DataSource primaryDataSource(DataSourceProperties properties) { // [4-1]
return properties.initializeDataSourceBuilder().build();
}
// [4]
@Bean
@Primary
@Qualifier("primaryDataSource")
public DataSource primaryDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder().build(); // [4-2]
}
}
-
[1] : DB 정보를 가진 파일의 path를 명시해준다.
그런데 application.yml 같은 경우엔 따로 설정하지 않아도 자동으로 값을 읽어온다.
즉 @PropertySource(“classpath:xxx/yyy/application.yml”) 코드가 없어도 정상적으로 동작한다.
-
[2] : 읽어드릴 property의 해당하는 prefix를 명시해준다.
이 예제에서 prefix 값은 spring.datasource 이다.
-
[3] : 아무런 설정이 없는 DataSourceProperties 객체를 반환한다.
반환과 동시에 Bean으로 등록되고
이 Bean은 primaryDataSource(DataSourceProperties properties) 호출 시
Spring이 알아서 spring.datasource 값을 Binding 시킨 후 parameter로 넘겨준다.
-
[4] : DataSource를 생성한다.
DataSource를 생성하는데 2가지 방법이 있으니 개인취향에 따라 사용하면 된다.
-
[4-1] : DB 정보를 가진 DataSourceProperties를 parameter로 받는다.
parameter로 전달받은 값을 사용하여 DataSource를 생성한다.
-
[4-2] : DataSourceProperties를 직접 호출한다.
따로 parameter를 받지 않고 primaryDataSourceProperties( )를 호출하여 DataSource를 생성한다.
-
Summary
-
Spring Boot 프로젝트에서 DB를 연동하는 방법은 다양하다.
각자가 선호하는 스타일로 연동을 해보자 !