Cambiar Schema basado en llamada desde controlador REST.
Tenemos dos productos: Producto A y Producto B, y ambos tienen controladores REST diferentes. Ambos de estos controladores están llamando al mismo servicio común y el servicio común está llamando a los métodos DAO comunes. Quiero seleccionar el esquema en los métodos DAO comunes en función de qué productos se haya realizado la llamada. Entonces, por ejemplo, si la llamada proviene del controlador del Producto A, seleccionar el esquema como A o de lo contrario B.
Quiero usar la misma conexión de base de datos y cambiar el esquema en función de qué controlador se realiza la llamada. Una posible solución sería pasar el nombre del esquema desde la capa del controlador a la capa del servicio, que a su vez lo pasa a la capa del DAO. Quiero evitar tener dos fuentes de datos diferentes y luego cambiar entre ellas dinámicamente.
Entonces, ¿hay alguna otra forma mejor de hacer esto?
Nota: Estamos usando Mybatis como nuestra capa de persistencia.
Por favor, encuentra el código de muestra:
Controlador para Producto A
@Component
public class ProductoA {
private final CommonService commonService;
public ProductoA(CommonService commonService){
this.commonService = commonService;
}
@GET
@Path("/test/dbSchema")
@Produces(MediaType.APPLICATION_JSON)
public Response getTotalProducts(){
// Llamando al método del servicio común aquí para obtener el total de productos
}
}
Controlador para Producto B
@Component
public class ProductoB {
private final CommonService commonService;
public ProductoB(CommonService commonService){
this.commonService = commonService;
}
@GET
@Path("/test/dbSchema")
@Produces(MediaType.APPLICATION_JSON)
public Response getTotalProducts(){
// Llamando al método del servicio común aquí para obtener el total de productos
}
}
FYI: Estamos usando Jersey.
davy.ai
Una posible solución para cambiar dinámicamente el esquema en la capa Mybatis DAO según el controlador que llame al servicio común sería utilizar una variable ThreadLocal para almacenar el nombre del esquema en la capa de servicio.
Aquí te mostramos cómo se puede lograr:
Nota: Esta solución asume que los nombres de esquema para el Producto A y el Producto B son conocidos y fijos. Si los nombres de esquema necesitan generarse dinámicamente o recuperarse de una base de datos, se requerirá una solución alternativa.