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 드라이버는 다음과 같이 기본 스키마를 설정할 수 없는 것으로 나타났습니다.
이 게시물에서 두 가지 옵션을 선택할 수 있습니다.
명령문을 실행하기 전에 다음 명령문을 실행합니다.
ALTER SESSION SET CURRENT_SCHEMA=yourSchema
테이블/뷰/등에 대한 동의어를 만듭니다(데이터베이스에 있는 많은 요소에 대해 이야기하는 경우 매우 번거롭습니다).
저는 첫 번째 옵션을 사용하여 조언할 것입니다.내가 보기에, Spring boot은 연결을 검색할 때 문을 실행하는 간단한 방법을 제공하지 않기 때문에, 가장 좋은 방법은 주변의 측면을 사용하는 것입니다.getConnection
method(또는 데이터 원본에서 연결을 검색하는 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
'programing' 카테고리의 다른 글
Git push: "치명적인 '오리진'이 Git 저장소가 아닌 것 같습니다. 치명적인 원격 저장소에서 읽을 수 없습니다." (0) | 2023.06.23 |
---|---|
TFS 2012에서 Excel로 내보내기, 오류 코드: TF400422 (0) | 2023.06.23 |
ASP.NET 번들 - 포함된 파일이 변경된 후 번들이 업데이트되지 않음(304개가 수정되지 않음을 반환함) (0) | 2023.06.23 |
git가 경로별로 하드/소프트 재설정을 수행할 수 없는 이유는 무엇입니까? (0) | 2023.06.23 |
포함()을 여러 번 사용할 때 엔티티 프레임워크 코드가 느림 (0) | 2023.06.23 |