Apollo oracle适配

news2024/11/20 19:40:10

前言:公司数据库统一切换为oracle,减少部署mysql,现需要将Apollo的数据库做oracle适配,当前使用版本为Apollo2.0.0,网上找到最新版本的适配oracle的版本也仅为1.4.0,现决定自己适配。

部分参考了官方介绍的改造文档:https://github.com/apolloconfig/apollo/compare/v0.8.0...vanpersl:db-oracle

Apollo版本 2.0.0

Oracle版本:12c

0.oracle添加用户和数据库

添加俩用户

APOLLOPORTALDB 默认数据库为APOLLOPORTALDB
APOLLOCONFIGDB 默认数据库为APOLLOCONFIGDB 

 

1.添加oracle驱动,替换掉mysql驱动

搜索引入mysql驱动的地方,删除后添加oracle驱动

        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>

2.修改默认jdbc驱动

# DataSource
#spring.datasource.hikari.connectionInitSql=set names utf8mb4
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect

3.原先数据库初始化脚本改造

3.1 因为oracle不加双引号默认字段和表名会转成大写,所以干脆全转成大写

3.2 oracle索引全局不能重复,但是Apollo不同表索引名有重复的,给每个表索引名称加表名前缀

3.3 oracle不支持自增,SPRING_SESSION表用到了自增,所以需要通过oracle的序列实现自增,这个官方有说明 https://github.com/spring-projects/spring-session/blob/faee8f1bdb8822a5653a81eba838dddf224d92d6/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc/schema-oracle.sql

 最终修改完的SQL会最后上传

4.Hibernate框架的字段表映射统一转大写加双引号

并且解决原先字段中包括oracle关键字问题

添加类

package com.ctrip.framework.apollo.common.utils;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

public class OracleUpperCaseStrategy extends PhysicalNamingStrategyStandardImpl {

    private static final long serialVersionUID = 1383021413247872469L;


    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        // 将表名全部转换成大写,加双引号解决字段或表名是oracle关键字
        String tableName = "\"" + name.getText().toUpperCase() + "\"";
        return name.toIdentifier(tableName);
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        // 将字段全部转换成大写,加双引号解决字段或表名是oracle关键字
        String columnName = "\"" + name.getText().toUpperCase() + "\"";
        return name.toIdentifier(columnName);
    }

}

添加common中application.properties配置,关联上面的转换类

spring.jpa.hibernate.naming.physical-strategy=com.ctrip.framework.apollo.common.utils.OracleUpperCaseStrategy
spring.jpa.hibernate.globally_quoted_identifiers=true
spring.jpa.properties.hibernate.globally_quoted_identifiers=true

 5.Spring Security认证的SQL修改

查找JdbcUserDetailsManager,将 ` 符号全部删除。因为oracle不识别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用FFMPEG加载外挂或内封字幕小记

ffmpeg版本&#xff1a; FFMEPEG 4.4 继上一篇实现音视频播放器后&#xff0c;将加载字幕的过程和遇到的坑记录如下&#xff1a; 字幕初识 视频字幕分为三种。 内嵌字幕&#xff0c;字幕与视频图像合二为一&#xff0c;成为视频帧的一部分&#xff0c;也叫硬字幕。 内封字…

数据库完整性

完整性概述 数据库的完整性是指数据库的正确性、一致性、相容性 正确性&#xff1a;数据库的数据符合语义约束 一致性&#xff1a;数据间的逻辑关系是正确的&#xff0c;从一个一致性状态转移到另一个一致性状态 相容性&#xff1a;同一事物的两个数据应当是一致的 约束的分类…

Zookeeper(一)

简介 设计模式角度 Zookeeper&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的注册&#xff0c;一旦这些数据的状态发生变化&#xff0c;Zookeeper就将负责通知已经在Zookeeper上注册的那…

JDBC从入门到精通

1 JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 我们开发的同…

两年时间,成为测试组老大....

看到行业的前辈都分享一些过往的经历来指导我们这些测试人员&#xff0c;我很尊敬我们的行业前辈&#xff0c;没有他们在前面铺路&#xff0c;如今我们这帮年轻的测试人估计还在碰壁或摸着石头过河&#xff0c;结合前辈们的经验&#xff0c;作为年轻的测试人也有自己的一些职场…

IMX6ULL裸机篇之DDR3的时钟配置

一. MMDC 控制器 对于 I.MX6U 来说&#xff0c;有 DDR 内存控制器&#xff0c;否则的话它怎么连接 DDR 呢&#xff1f;MMDC控制器 就是 I.MX6U 的 DDR内存控制器。 MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY)&#xff0c;内核和 PHY 的功能如下&#xff1a; MMDC 内…

nacos服务端源码集群同步源码分析

nacos集群状态同步源码分析 ServerStatusReporter ServerStatusReporter 是 ServerListManager的内部类 通过Component注解被解析到spring容器中 再通过PostConstruct初始化执行init方法 上边代码启动了一个延时2秒的线程 private class ServerStatusReporter implements Run…

信号时域分析方法

主要参考&#xff1a; 时域分析——有量纲特征值含义一网打尽 信号时域分析方法的理解&#xff08;峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等&#xff09; 重要笔记如下&#xff1a; 建议跟参考笔记同步看。 有量纲特征值8个——最大值、最小值、峰峰值、均值…

Unable to resolve resource vscode-vfs://github%2B7b2276223a312c22726566223a7

github无法访问&#xff1f;vscode 无法使用github登录同步? 改 hosts 吧 Unable to resolve resource vscode-vfs://github%2B7b2276223a312c22726566223a7一、无法访问 github.com &#xff1f; 想要去 github.com 上拿来主义&#xff0c;结果访问不了&#xff0c;或者 np…

Go基础篇:接口

目录 前言✨一、什么是接口&#xff1f;二、空接口 interface{}1、eface的定义2、需要注意的问题 三、非空接口1、iface的定义2、itab的定义3、itab缓存 前言✨ 前段时间忙着春招面试&#xff0c;现在也算告一段落&#xff0c;找到一家比较心仪的公司实习&#xff0c;开始慢慢回…

Linux防火墙之iptables(上)

目录 一、iptables防火墙的相关知识 1&#xff09;防火墙的概念 2&#xff09;iptables的简介 3&#xff09;netfilter/iptables 的关系 netfilter iptables 二、iptables中的四表五链 1 &#xff09;四表五链的关系 2&#xff09;iptables中的四表 3&#xff0…

0基础要怎么开始学习c++?

先放一张学习线路图&#xff1a; 对于初学者看到这张线路图可能有点晕。实际上耐心一点&#xff0c;有足够的毅力还是可以自学攻克C这门语言的。 一、C语言 基础内容就是两块&#xff1a;基础语法和一个小游戏案例 进阶一点也是两块内容&#xff1a;C高级和数据结构。包括一…

怎么画骑鹅旅行记思维导图?办公常备工具

骑鹅旅行记不仅是一本神奇的奇幻童话&#xff0c;更是一本寓教于乐的启蒙读物&#xff0c;引导着孩子们学习正确的价值观和道德观。在开始制作骑鹅旅行记思维导图之前&#xff0c;我们需要先整理好故事情节&#xff1a;小男孩尼尔斯因捉弄动物而被一个小精灵变成了拇指大小&…

中国社科院与美国杜兰大学金融管理硕士——与时间赛跑,充分利用每一分钟

不管你愿不愿意&#xff0c;时间总是在不经意间流去。林清玄在《和时间赛跑》中写道&#xff1a;“虽然我知道人永远跑不过时间&#xff0c;但是可以比原来快跑几步。那几步虽然很小很小&#xff0c;但作用却很大很大”。是的&#xff0c;我们需要与时间赛跑&#xff0c;充分利…

就业内推 | 上市公司招网工,最高25k*14薪,六险一金

01 锐捷网络 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、承接本产品线&#xff08;无线或数通&#xff09;所有咨询、故障、网络变更等业务&#xff0c;响应内外部客户的业务响应需求&#xff0c;需要值班。 2、同时作为产品线技术力的核心&#xff0c;需要负责…

购票API接口商品详情信息API

购票网是一个在线购票平台&#xff0c;为音乐会、演唱会、话剧、体育比赛等各类娱乐活动提供门票销售服务。通过大麦网&#xff0c;用户可以轻松购买心仪的演出门票&#xff0c;并享受到良好的购票体验。 为了让更多用户了解到大麦网的商品详情&#xff0c;并能够方便地获取相…

内防泄密重要,还是外防窃密重要?

内防泄密是组织为防止内部敏感信息未经授权泄露所采取的各种管理与技术措施的总称。它主要针对内部人员的信息访问与操作行为进行管控,减少故意或疏忽泄密事件的发生几率。 内防泄密的工作&#xff0c;通常包括员工管理、权限管控、监控检查、分级保护、离岗管控、技术防护、事…

高赞热门,这是B站值得一看的商单作品

3月30日、5月11日&#xff0c;第十届中国网络视听大会和首届上海网络视听内容创作者大会先后开幕。 在现场&#xff0c;陈睿共发表了《科技与青年的双向奔赴》、《B站&#xff0c;高质量内容的沃土》两次主题演讲。陈睿分享道&#xff0c;“优质的内容和创作者&#xff0c;是能…

主动防御更安全 混沌工程助力企业系统稳定

数字经济时代背景下&#xff0c;各个行业迎来数字化转型浪潮&#xff0c;随着企业对于云计算的理解和实践不断深入&#xff0c;数据作为生产要素参与到市场分配当中&#xff0c;全面渗透金融、政务、医疗、教育、能源等各个领域&#xff0c;已成为企业发展乃至国家发展的重要战…

GPU机器docker环境离线安装

秋风阁(https://focus-wind.com/) 文章目录 docker 环境离线二进制安装下载二进制包解压.tgz包迁移文件到/usr/bin/目录下启动docker手动启动dockersystemctl启动dockerdocker.servicedocker.socketcontainerd.service设置开机重启启动docker服务 离线安装nvidia-docker&#x…