Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Neuer Fehler in Spring Boot 2.3.0.RELEASE:UnsatisfiedDependencyException für Oracle 12.2.0.1 jdbcdriver, aber nicht mit mysql jdbcdriver

Der JDBC-Treiber funktioniert einwandfrei.

Wie Sie bereits in den Kommentaren erfahren haben, besteht das Problem darin, dass

a) Spring Data JDBC erfordert jetzt einen Dialect für jede Datenbank

b) Spring Data JDBC wird nicht mit einem Dialect ausgeliefert für Oracle.

Die Lösung:

Wie in Spring Data JDBC Firebird-Dialekt nicht erkannt und in https://spring .io/blog/2020/05/20/migration-to-spring-data-jdbc-2-0 Sie müssen Ihren eigenen Dialect angeben Umsetzung jetzt.

So etwas sollte funktionieren:

class MyOracleDialect extends AnsiDialect {

    private static final LimitClause LIMIT_CLAUSE = new LimitClause() {

        @Override
        public String getLimit(long limit) {
            return String.format("FETCH NEXT %d ROWS ONLY", limit);
        }

        @Override
        public String getOffset(long offset) {
            return String.format("OFFSET %d ROWS", offset);
        }

        @Override
        public String getLimitOffset(long limit, long offset) {
            return String.format("OFFSET %d ROWS FETCH NEXT %d ROWS ONLY", offset, limit);
        }

        @Override
        public Position getClausePosition() {
            return Position.AFTER_ORDER_BY;
        }
    };

    @Override
    public LimitClause limit() {
        return LIMIT_CLAUSE;
    }

}

Sie müssen dann den Dialect machen über einen DialectProvider verfügbar wie in der referenzierten Stackoverflow-Frage beschrieben:

Einige Hintergrundinformationen:

Bisher führt das Spring Data-Team seine Integrationstests nicht mit einer Oracle-Datenbank durch. Dies liegt daran, dass lange Zeit unklar war, wie dies legal geschehen soll, da der gesamte Code einschließlich der Build-Infrastruktur Open Source war und Oracle akzeptiert werden musste allerlei Dinge, um eine Datenbankinstanz oder deren Treiber zu verwenden.

Inzwischen sind Docker-Images zum Testen verfügbar und der JDBC-Treiber ist von Maven Central erhältlich. Es ist immer noch ein wenig knifflig, da die aktuellen Optionen für Docker-Images, die ich kenne, Sie zwischen einer Image-Größe von vielen GBs oder einer Startzeit von etwa 15 Minuten wählen lassen.

Jedenfalls arbeitet ein Community-Mitglied an dem Problem:https://jira.spring.io/ durchsuchen/DATAJDBC-256

Ich bin daher zuversichtlich, dass wir Oracle in naher Zukunft vollständig unterstützen können.