标签:mysql 多表 _id comm HERE 本地 项目 假设 修改
这几天工作需要使用Apollo配置中心。Apollo唯一的依赖是MySQL数据库,然而公司只有Oracle数据库资源。这里有一个Oracle适配改动的分支,但是它是基于0.8.0版本的Apollo。看着Apollo官方文档上各种特性都只有1.0.0以上版本才有,我决定基于当前最新版本(1.2.0)自己改一波。
在开始改动前我们需要了解Apollo工程的整体结构,以及调试启动的方法。建议本地先搭建个MySQL库,然后把Apollo跑起来看看。官方对此有详细的文档。
另外,从MySQL到Oracle,一个比较大的问题是Apollo中很多表名、字段名和Oracle的关键字有冲突,导致无法在Oracle建表。这个问题可以使用双引号来解决。我们知道,Oracle的SQL语句在解释时会把所有的字符都转为大写(字符串常量除外),所以我们一般认为Oracle的SQL语法不区分大小写。比如说我可以用如下SQL建表:
create TaBle aPplicAtiOn(...);
最终我们会得到一张名为APPLICATION
的表。在一些情况下,我们会需要区分大小写的表名,这时候我们可以在建表时用双引号将表名括起来:
create TaBle "aPplicAtiOn"(...);
这样,我们就真正得到了名为aPplicAtiOn
的表了。同理,字段名、同名等Oracle对象也都可以用双引号来区分大小写。关于Oracle双引号,这里有更多的讲解。
下面的改动大部分是参考已有的vanpersl/apollo
基于0.8.0的Oracle版本的代码。这里是他的修改内容。
总体来说改动量不大。我大约花了一天的时间完成了整个改动。下面是改动步骤。
spring.datasource.url=jdbc:oracle:thin:@{ip}:{port}:{db}
spring.datasource.username={ApolloConfig|ApolloPortal}
spring.datasource.password={password}
这些配置改动在apollo-common
的application.properties
配置文件。
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
指定使用Oracle驱动spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
。否则Hibernate会生成fetch first ? rows only
之类的11c才支持的语句导致SQL执行错误。ID_SEQ
的Sequence。代码中所有的Entity类的id
属性都要加上GeneratedValue
和SequenceGenerator
的配置。Apollo的代码中大部分的Entity类是继承自一个BaseEntity
基类的,所以要修改的地方并不多。
BaseEntity
、ReleaseMessage
、InstanceConfig
、Instance
、UserPO
、ConsumerAudit
GeneratedValue
和SequenceGenerator
两行:public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
@SequenceGenerator(name = "sequence", sequenceName = "ID_SEQ", allocationSize = 1)
@Column(name = "Id")
private long id;
...
}
这部分的改动最多,也最枯燥。合理利用IDE的replace功能可以极大的提高修改效率。
apollo-commom
的application-properties
配置中加上:spring.jpa.hibernate.globally_quoted_identifiers=true
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
这样Hibernate的ORM生成SQL语句时就会自动给表名列名都加上双引号。
我最后修改的结果上传在这里:https://github.com/sKabYY/apollo。
目前已经平稳运行。后面如果有bug修改或者升级也会更新上去。
标签:mysql 多表 _id comm HERE 本地 项目 假设 修改
原文地址:https://www.cnblogs.com/Leo_wl/p/10335133.html