programing

Spring Boot 및 Spring JDBC를 사용하여 Oracle에서 기본 스키마 = SOMETE 설정

oldcodes 2023. 6. 23. 22:25
반응형

Spring Boot 및 Spring JDBC를 사용하여 Oracle에서 기본 스키마 = SOMETE 설정

나는 지금 오라클과 spring jdbc로 작업하고 있지만, 내 sql 문에 스키마를 사용하고 싶지 않습니다.

예:SCHEMA.table에서 *를 선택합니다.

application.properties 또는 application.yml에서 기본 스키마를 설정할 수 있는 방법이 있습니까?

스프링 데이터 소스를 사용하여 데이터베이스 연결을 정의한다고 가정하면 데이터 소스 구성을 정의할 때 기본 스키마를 설정할 수 있습니다.

spring.datasource.schema = #value for your default schema to use in database

자세한 내용은 Spring Boot Reference Guide에서 확인할 수 있습니다. 부록 A. 공통 응용 프로그램 속성


몇 가지 조사를 해 본 결과, Oracle 드라이버는 다음과 같이 기본 스키마를 설정할 수 없는 것으로 나타났습니다.

Oracle 연결 URL의 기본 스키마

이 게시물에서 두 가지 옵션을 선택할 수 있습니다.

  1. 명령문을 실행하기 전에 다음 명령문을 실행합니다.

    ALTER SESSION SET CURRENT_SCHEMA=yourSchema
    
  2. 테이블/뷰/등에 대한 동의어를 만듭니다(데이터베이스에 있는 많은 요소에 대해 이야기하는 경우 매우 번거롭습니다).

저는 첫 번째 옵션을 사용하여 조언할 것입니다.내가 보기에, Spring boot은 연결을 검색할 때 문을 실행하는 간단한 방법을 제공하지 않기 때문에, 가장 좋은 방법은 주변의 측면을 사용하는 것입니다.getConnectionmethod(또는 데이터 원본에서 연결을 검색하는 method)를 실행하고 여기서 문을 실행합니다.


당신의 의견에 따르면, 그것을 해결하는 더 쉬운 방법은 의 스크립트를 사용하는 것입니다.spring.datasource.schema:

spring.datasource.schema = schema.sql

그다음에 파일 스퀴마.다음을 포함하는 sql:

ALTER SESSION SET CURRENT_SCHEMA=mySchema

봄부츠에서 다른 방법을 찾았어요

@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource(@Value("${spring.datasource.schema}") String schema) {
    DataSource datasource = DataSourceBuilder.create().build();
    if(!schema.isEmpty() && datasource instanceof org.apache.tomcat.jdbc.pool.DataSource){
            ((org.apache.tomcat.jdbc.pool.DataSource) datasource).setInitSQL("ALTER SESSION SET CURRENT_SCHEMA=" + schema);
    }
    return datasource;
} 

히카리를 사용하는 경우 spring.data source를 사용합니다.히카리.코끼리=YOR_SCHEMA. Oracle을 사용하는 SpringBoot + Tomcat과 함께 작동합니다.

엔티티 클래스를 업데이트하여 이 문제를 해결할 다른 방법을 찾았습니다.

@Table(schema = "SCHEMA_NAME" ,name = "TABLE_NAME")

현재 승인된 답변에 문제가 있었습니다. 구체적으로 스키마는 초기 연결에서만 변경됩니다.앱에서 연결 풀을 사용하는 경우 각 연결에 SQL을 적용하도록 풀을 구성해야 합니다.

예를 들어 Spring Boot 1.5.x(Tomcat)의 기본 jdbc 풀 사용:

spring.datasource.tomcat.init-s-q-l = ALTER SESSION SET CURRENT_SCHEMA=mySchema

사용자로 데이터베이스에 연결하면 로그인할 때마다 스키마를 변경하는 트리거를 만들 수 있습니다.

CREATE OR REPLACE TRIGGER LOGON_TRG 
  AFTER LOGON ON SCHEMA
BEGIN
     EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA = foo';
EXCEPTION 
  when others 
    then null;
END;
/  

다른 옵션은 데이터 원본 래퍼를 생성하는 것입니다.일반적으로 데이터 원본을 만든 다음 getConnection 메서드를 제외한 모든 메서드를 전달하는 래퍼를 만듭니다.그들을 위해 나는 스키마를 설정하기 위해 SQL을 추가했습니다.여러 데이터 소스가 있으므로 각 데이터 소스에 대해 다른 스키마를 지정할 수 있습니다.만약 이것에 문제가 있다는 것을 아는 사람이 있다면 나는 댓글을 달 것입니다.또는 속성을 사용하는 대안이 있는지도 모릅니다.

언급URL : https://stackoverflow.com/questions/37973425/set-default-schema-something-in-oracle-using-spring-boot-and-spring-jdbc

반응형