Saltar al contenido

Establezca el esquema predeterminado = ALGO en Oracle usando Spring Boot y Spring JDBC

No olvides que en las ciencias informáticas cualquier problema casi siempre tiene diversas soluciones, así que nosotros te enseñaremos lo más óptimo y eficiente.

Solución:

Suponiendo que defina las conexiones de su base de datos utilizando fuentes de datos Spring, puede establecer el esquema predeterminado al definir la configuración de la fuente de datos:

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

Puede encontrar más información aquí: Guía de referencia de Spring Boot. Apéndice A. Propiedades comunes de la aplicación


Después de investigar un poco, parece que el controlador de Oracle no le permite establecer un esquema predeterminado para trabajar, como se indica aquí:

Esquema predeterminado en la URL de conexión de Oracle

Desde esa publicación, tienes dos opciones:

  1. Ejecute esta declaración antes de ejecutar sus declaraciones:

    ALTER SESSION SET CURRENT_SCHEMA=yourSchema
    
  2. Cree sinónimos para sus tablas/vistas/etc. (lo que encuentro realmente engorroso si estamos hablando de muchos elementos en su base de datos).

Aconsejaría usar la primera opción. Por lo que veo, Spring Boot no ofrece una forma simple de ejecutar una declaración al recuperar la conexión, por lo que la mejor opción será usar un aspecto alrededor del getConnection (o el método que recupera la conexión de la fuente de datos) y ejecuta la declaración allí.


De su comentario, una forma más fácil de resolverlo es usando un script en spring.datasource.schema:

spring.datasource.schema = schema.sql

Y luego un archivo squema.sql con lo siguiente:

ALTER SESSION SET CURRENT_SCHEMA=mySchema

En Spring Boot, encontré otra forma de hacerlo,

@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;
 

Encontré otra forma de evitar esto actualizando la clase de entidad con

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

Tienes la opción de asistir nuestro análisis mostrando un comentario y dejando una puntuación te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *