Fuente de datos dinámica en Spring boot JPA

Tengo una aplicación que necesita conectarse a unos pocos esquemas diferentes, pero todos del mismo tipo (ORACLE). La decisión de qué esquema proviene de la interfaz de usuario.

si el usuario selecciona el esquema 1, la entidad debe persistir en el esquema 1, si selecciona otro, entonces debe estar en el otro esquema seleccionado.

Estoy usando Spring boot + Hibernate con la dependencia "spring-boot-starter-data-jpa"

He creado una clase de fuente de datos como la siguiente para poder cambiar el "nombre de esquema" en el objeto de fuente de datos cada vez antes de invocar la capa de datos.

@Component
public class SchemaDatasource extends AbstractDataSource {

    private String schemaName;

    @Autowired
    private DSManager dsm;

    public void setSchemaName(String schemaName) {
        this.schemaName = schemaName;
    }

    @Override
    public Connection getConnection() throws SQLException {
        if (schemaName!= null)
            return dsm.getConnection(schemaName);
        else
            return null;
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        if (schemaName!= null)
            return dsm.getConnection(schemaName);
        else
            return null;
    }

}

Mi problema es durante el inicio, el "HibernateJpaAutoConfiguration" intenta crear sessionfactory. Durante la creación intenta verificar la conexión con el origen de datos Pero como schemaName es nulo en el inicio, SchemaDatasource devuelve una conexión nula con la cual falla el arranque de la aplicación.

¿Hay alguna manera de manejar esto? Estoy esperando algo similar a SessionFactory con opciones en hibernación.

En el caso de RoutingDatasource también, tengo que establecer defaultDatasource.

Spring boot version: 1.5.9.RELEASE

Respuestas a la pregunta(1)

Su respuesta a la pregunta