Apollo oracle适配

news/2024/4/26 16:07:45/文章来源:https://blog.csdn.net/weixin_38751513/article/details/130725279

前言:公司数据库统一切换为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;@Overridepublic Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {// 将表名全部转换成大写,加双引号解决字段或表名是oracle关键字String tableName = "\"" + name.getText().toUpperCase() + "\"";return name.toIdentifier(tableName);}@Overridepublic 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.luyixian.cn/news_show_302315.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux内核篇-文件系统(硬盘、虚拟文件系统、文件缓存)

文件系统的意义 之前说的都是在进程在物理内存保存的数据&#xff0c;内存就像一个纸箱子&#xff0c;仅仅是一个暂存数据的地方&#xff0c;而且空间有限。如果我们想要进程结束之后&#xff0c;数据依然能够保存下来&#xff0c;就不能只保存在内存里&#xff0c;而是应该保存…

Linux环境基础开发工具

目录 Linux软件包管理器yum Linux开发工具 文本编辑器vi、vim vim的基本概念 vim操作 Linux编译器-gcc\g使用 函数库分为动态库和静态库 Linux调试器gdb使用 在gdb模式下的命令 Linux软件包管理器yum yum怎么说呢&#xff1f;就相当我们手机里的应用商店。我们需要安…

本地服务器与云服务器哪个好?

本地服务器和云服务器是企业可以使用的两种不同的服务器设置。主要区别在于本地服务器托管&#xff0c;第三方提供商托管云服务器。那么&#xff0c;本地服务器和云服务器哪个更好呢&#xff1f; 接下来&#xff0c;将带大家讨论本地服务器和云服务器的优缺点&#xff0c;并帮…

系统设计基础-大型网站通用架构模式

文章目录 一.何谓模式二.通用架构模式1.分层2.分割3.分布式4.集群5.缓存6.异步处理7.冗余备份8.自动化9.安全 本文主要参考自《大型网站技术架构&#xff1a;核心原理与案例分析》一书第二章节和其他网络文章&#xff0c;如有遗漏或错误&#xff0c;还望海涵并指出。谢谢&#…

​ NISP一级备考知识总结之信息安全概述、信息安全基础

参加每年的大学生网络安全精英赛通过初赛就可以嫖一张 nisp&#xff08;国家信息安全水平考试&#xff09; 一级证书&#xff0c;nisp 一级本身没啥考的价值&#xff0c;能白嫖自然很香 1.信息安全概述 信息与信息技术 信息概述 信息奠基人香农认为&#xff1a;信息是用来消…

在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL

在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL 1. Update Apt Package Index2. Install MySQL Server & client on Ubuntu 22.043. To Check the version4. Run the Security script to secure MySQL5. Login Database Server as the root user6. Manage MySQL service7…

mysql数据库的表约束

表的约束 5.1&#xff1a;表的约束的概念 定义&#xff1a; 数据库表约束是用于定义和实施数据完整性的规则或条件。它们被应用于数据库表中的列&#xff0c;以确保数据的一致性、有效性和准确性。表约束可以强制执行特定的规则&#xff0c;限制数据的插入、更新或删除操作&…

ESP32-C2系列开发板简介

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

python3 爬虫相关学习3:response= requests.get(url)的各种属性

目录 1 requests.get(url) 的各种属性&#xff0c;也就是response的各种属性 2 下面进行测试 2.1 response.text 1.2 response.content.decode() 1.2.1 response.content.decode() 或者 response.content.decode("utf-8") 1.2.2 response.content.decode(…

C++类和对象再探

文章目录 const成员再谈构造函数成员变量的定义函数体内赋值初始化列表 隐式类型转换explicitstatic成员 const成员 我们知道在调用类的成员函数时,会有一个默认的this指针且这个this指针时不可以被修改的,例如在日期类中,会有隐式的Date * const this;注意这里默认会在this前…

Flutter仿写微信导航栏快速实现页面导航

文章目录 前言使用TabBar实现TabBar介绍TabBar的重要属性说明TabBarView介绍TabBarView的重要属性TabBar总结TabBar实现底部导航的例子 BottomNavigationBar实现BottomNavigationBar介绍BottomNavigationBar实现底部导航栏的例子 总结BottomNavigationBarTabBar根据实际情况选择…

【Vue基础】Element案例学习-智能学习辅助系统

一、效果展示 初步设计一个系统&#xff0c;有目录、搜索栏、表格操作等。 二、参考代码 主要关注上图“App.vue”和“BtestView.vue”两个文件的代码 1、App.vue <template><div ><!-- <h1>{{ message }}</h1> --><!-- <element-view&…

暴涨700w播放,星穹铁道恰饭频频登上B站爆款热榜!

B站作为现在年轻一代聚集的多元化社区&#xff0c;游戏内容则是社区内受众较为广泛的存在&#xff0c;而星铁作为面向年轻群体的回合制游戏&#xff0c;自然是赢得B站核心用户群体的青睐。 4月26日&#xff0c;暌违已久的手游《崩坏&#xff1a;星穹铁道》&#xff08;后文简称…

JavaEE(系列6) -- 多线程(解决线程不安全系列1-- 加锁(synchronized)与volatile)

首先我们回顾一下上一章节引起线程不安全的原因 本质原因:线程在系统中的调度是无序的/随机的(抢占式执行) 1.抢占式执行 2.多个线程修改同一个变量. 一个线程修改一个变量>安全 多个线程读取同一个变量>安全 多个线程修改不同的变量>安全 3.修改操作,不是原子的.(最…

Python带你实现批量自动点赞小程序

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 所用知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests 请求模块 &#xff0c;第三方&#xff0c;需安装 win R 输入cmd 输入安装命令 pip inst…

初步认识性能测试和完成一次完整的性能测试

上一篇博文主要通过两个例子让测试新手了解一下测试思想&#xff0c;和在做测试之前应该了解人几点&#xff0c;那么我们在如何完成一次完整的性能测试呢&#xff1f; 测试报告是一次完整性能测试的体现&#xff0c;所以&#xff0c;这里我给出一个完整的性能测试报告&#xff…

springBoot中使用redis实现分布式锁实例demo

首先 RedisLockUtils工具类 package com.example.demo.utils;import org.junit.platform.commons.util.StringUtils; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.red…

SAP入门到放弃系列之需求管理的基本要素

需求管理目标&#xff1a; 一般而言&#xff0c;生产计划&#xff08;PP&#xff09;的总体目标&#xff0c;特别是需求管理的总体目标是通过减少以下内容来更好地为客户服务&#xff1a; 补货提前期存货成本 需求管理的要素&#xff1a; 需求管理工作的主要要素广义上可分…

❤ cannot read properties of null(reading appendChild)解决办法

❤ 操作元素报&#xff1a;cannot read properties of null(reading appendChild)解决办法 1、场景&#xff1a; 写的一个js渲染&#xff0c;但是出了个小问题&#xff0c;cannot read properties of null(reading appendChild)报错。 <div id"divps" class&qu…

机器学习项目实战-能源利用率 Part-1(数据清洗)

1. 项目背景 2009年的《当地法案84号》&#xff0c;或纽约市基准法案&#xff0c;要求对能源和用水量进行年度基准测试和披露信息。被覆盖的财产包括单个建筑物的税收地块&#xff0c;其总建筑面积大于50,000平方英尺&#xff08;平方英尺&#xff09;&#xff0c;以及具有超过…