Backend/SpringBoot
DB 연결 설정
Dean83
2024. 10. 29. 14:47
- application.yml 에서 DB 연결 및 속성에 대한 설정을 진행한다.
# DATABASE
spring:
datasource:
url:db접속주소(jdbc로 시작함)
driverClassName:db드라이버이름(db종류에 따라 다름)
username:아이디
password:비밀번호
jpa:
properties:
hibernate:
dialect:db종류에따라 별도로 검색해서 설정
format_sql:true
show_sql:true
ddl-auto:update //none 등 알아서 설정
Tab으로 상위 하위 구분을 해야한다. Tistory에서 탭이 제대로 표현안되어서 datasource,jpa 하위 항목들이 tab이 안먹는다
- 접속하는 DB에 따라 드라이버 이름, dialect 가 변경된다
- dialect : DB 별로 컬럼 생성시 속성값들이 다른데, 이를 미리 정의해 놓은것이라 보면 된다.
- ddl-auto
- DB에 내용이 변경되었을때 어떻게 처리 할 것인가? 에 대한 옵션이다.
- none
- 아무것도 하지 않음 (기본값)
- create
- 스프링부트 시작시 새로 생성. 기존 테이블을 drop하고 만든다
- create-drop
- 스프링부트 종료시 DB 삭제
- update
- 내용 변경되면 DB에 반영. 없으면 신규 생성
- validate
- 변경된 내용 확인만 진행
- 변경된 내용 확인만 진행
- none
- 멀티 DB 접속
- 여러 DB에 접속 할경우 application.yml 을 수정해 준다
- datasource 하위에 겹치지 않는 이름을 부여한다
- 해당 이름 뒤에 기존의 url 이 아닌 jdbc-url 로 접속 주소를 설정한다.
- 기본설정은 아래와 같다.
- DB에 내용이 변경되었을때 어떻게 처리 할 것인가? 에 대한 옵션이다.
# DATABASE
spring:
datasource:
이름1:
jdbc-url:db접속주소(jdbc로 시작함)
driverClassName:db드라이버이름(db종류에 따라 다름)
username:아이디
password:비밀번호
이름2:
jdbc-url:db접속주소(jdbc로 시작함)
driverClassName:db드라이버이름(db종류에 따라 다름)
username:아이디
password:비밀번호
jpa:
properties:
hibernate:
dialect:db종류에따라 별도로 검색해서 설정
format_sql:true
show_sql:true
ddl-auto:update //none 등 알아서 설정
Tab으로 상위 하위 구분을 해야한다. Tistory에서 탭이 제대로 표현안되어서 datasource 하위 항목들이 tab이 안먹는다
- DataSource 정의
- 멀티 DB를 사용할 경우 Java 소스코드로 구성된 DataSource를 정의 해 주어야 한다.
- 연결되는 엔티티 설정 등
- 둘중 하나는 반드시 @Primary 설정을 해야하고, 나머지는 내용이 동일하게 새로 생성하면 된다
- 즉, 연결되는 DB에 따라 DataSource를 1:1로 매칭하여 작성해야 한다
- 멀티 DB를 사용할 경우 Java 소스코드로 구성된 DataSource를 정의 해 주어야 한다.
@Configuration
@EnableJpaRepositories(
//리파지토리가 있는 패키지 위치.
basePackages = {
"com.example.test1.test1"
},
entityManagerFactoryRef = "LocalContainerEntityManagerFactoryBean 리턴하는 함수명",
transactionManagerRef = "PlatformTransactionManager 리턴하는 함수명"
)
public class DataSource1 {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.이름1")
public DataSource 함수이름() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean 함수명() {
LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setDataSource(DataSource리턴함수이름);
//엔티티가 있는 패키지명. 여러개 설정 가능
bean.setPackagesToScan(
"com.example.test1.test1"
);
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
bean.setJpaVendorAdapter(vendorAdapter);
return bean;
}
@Bean
@Primary
public PlatformTransactionManager 함수명() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(LocalContainerEntityManagerFactoryBean리턴함수명().getObject());
return transactionManager;
}
}