[Oracle] Springboot Dialect 못찾는 경우

배세훈·2022년 5월 11일
0

oracle

목록 보기
1/1

Springboot에서 org.springframework.boot:spring-boot-starter-data-jdbc를 사용시 Dialect를 못찾는 현상이 발생.

->
1. application.yml에 아래값 추가
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.Oracle12cDialect

  1. resources/META-INF/spring.factories 추가
    org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=com.config.oracle.MyOracleDialect

  2. Dialect Custom 코드 작성

import org.springframework.data.jdbc.repository.config.DialectResolver;
import org.springframework.data.relational.core.dialect.AnsiDialect;
import org.springframework.data.relational.core.dialect.Dialect;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcOperations;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Locale;
import java.util.Optional;

@Configuration
public class MyOracleDialect implements DialectResolver.JdbcDialectProvider{
	@Override
    public Optional<Dialect> getDialect(JdbcOperations operations){
    	return Optional.ofNullable(
        	operations.execute((ConnectionCallback<Dialect>) MyOracleDialect::getDialect));
    }
    
    private static Dialect getDialect(Connection connection) throws SQLException{
    	DatabaseMetaData = connection.getMetaData();
        String name = metaData.getDatabaseProductName().toLowerCase(Locale.ROOT);
        if(name.contains("oracle"){
        	return AnsiDialect.INSTANCE;
        }
        
        return null;
    }
}
profile
성장형 인간

0개의 댓글