Oracle
 sql >> Base de données >  >> RDS >> Oracle

Nouvelle erreur dans le démarrage du printemps 2.3.0.RELEASE :UnsatisfiedDependencyException pour Oracle 12.2.0.1 jdbcdriver mais pas avec mysql jdbcdriver

Le pilote JDBC fonctionne très bien.

Comme vous l'avez déjà appris dans les commentaires, le problème est que

a) Spring Data JDBC nécessite désormais un Dialect pour chaque base de données

b) Spring Data JDBC n'est pas livré avec un Dialect pour Oracle.

Le correctif :

Comme décrit dans Dialecte Spring Data JDBC Firebird non reconnu et dans https://spring .io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0 vous devez fournir votre propre Dialect mise en œuvre dès maintenant.

Quelque chose comme ceci devrait fonctionner :

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

}

Vous devez ensuite faire le Dialect disponible via un DialectProvider comme décrit dans la question Stackoverflow référencée :

Quelques informations :

Jusqu'à présent, l'équipe Spring Data n'exécute pas ses tests d'intégration avec une base de données Oracle.C'est parce que pendant un certain temps, il n'était pas clair comment le faire de manière légale, car tout le code, y compris l'infrastructure de construction, était open source et Oracle devait accepter de toutes sortes de choses pour utiliser une instance de base de données ou leur pilote.

À présent, les images Docker sont disponibles pour les tests et le pilote JDBC est disponible auprès de Maven Central. C'est encore un peu délicat car les options actuelles pour les images docker que je connais vous permettent de choisir entre une taille d'image de plusieurs Go ou un temps de démarrage d'environ 15 minutes.

Quoi qu'il en soit, un membre de la communauté travaille sur le problème :https://jira.spring.io/ parcourir/DATAJDBC-256

Je suis donc convaincu que nous serons en mesure de prendre entièrement en charge Oracle dans un avenir proche.