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
        • 변경된 내용 확인만 진행




    • 멀티 DB 접속
      • 여러 DB에 접속 할경우 application.yml 을 수정해 준다
      • datasource 하위에 겹치지 않는 이름을 부여한다
        • 해당 이름 뒤에 기존의 url 이 아닌 jdbc-url 로 접속 주소를 설정한다.
      • 기본설정은 아래와 같다.
# 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로 매칭하여 작성해야 한다
@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;
    }
}