![最新play框架手册19管理数据库变化evolution资料_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/86f51c0a-90df-4c1f-8dea-5c94b24212e1/86f51c0a-90df-4c1f-8dea-5c94b24212e11.gif)
![最新play框架手册19管理数据库变化evolution资料_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/86f51c0a-90df-4c1f-8dea-5c94b24212e1/86f51c0a-90df-4c1f-8dea-5c94b24212e12.gif)
![最新play框架手册19管理数据库变化evolution资料_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/10/86f51c0a-90df-4c1f-8dea-5c94b24212e1/86f51c0a-90df-4c1f-8dea-5c94b24212e13.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、19.管理数据库变化Evolution当使用关系数据库时,你需要去跟踪和安排数据库 schema (结构)变化,特别 是有多个存储位置的情况下,你就需要更多的经验来跟踪数据的 schema变化:当处理团队合作进行开发时,每个人都需要知道数据库结构的变化当部署到生产服务器上时,就需要一个稳健的方式去更新数据库结构如果在多台数据库服务器上工作时,就需要保持所有数据库结构同步如果在JPA下工作,Hibernate会自动为你处理好这些数据库变化。如果你不打 算使用JPA或打算手工对数据库结构进行更好的调整,那么Evolutions将非常有用。Evolutio ns脚本Play使用evolutions
2、脚本来跟踪你的数据库变化。这些脚本采用的是原始的 sql语句来书写的,应该位于应用程序的 db/evolutions目录。第一个脚本名叫1.sql,第二为2.sql,以此类推每个脚本包含了两部分:* Ups部分用于描述必要的转换* Dow ns部分用于描述如何恢复他们比如,查看第一个evolution脚本,这个脚本用于引导一个基本的应用:# Users schema# - !UpsCREATE TABLE User (id bigi nt(20) NOT NULL AUTO_INCREMENT,email varchar(255) NOT NULL,password varchar(255)
3、NOT NULL,full name varchar(255) NOT NULL,isAdmin boolean NOT NULL,PRIMARY KEY (id);# - !Dow nsDROP TABLE User;正如你看到的一样,必须在sql脚本里使用注释来界定 Ups和Dow ns节如果在applictaion.conf里配置了数据库,那么Evolutions将被自动激活,而且 evolution scripts将被显示出来。通过设置 evolutions.enabled为 false可以禁此显示脚本。比如,当测试他们自己的数据库里,你可以为测试环境设置 为禁用模式。当evoluti
4、ons 被激活后, 在DEV莫式下,Play将为每个请求检查数据库结构 状态,或在PRODS式下启动应用程序时进行数据库结构状态检查。在DEV莫式下,如果数据库结构不是最新的,一个错误页面会显示出来,它会建议你运行合 适的sql脚本同步你的数据结构。Application error+ * http: / /local host:9000/Your database needs evolution!An SQL script will be run on your database,This SQL script must be run:CREATE TABLE User (id bigint
5、(20) NOT NULL AUTO_INCREHENTf email varchar(255) NOT NULL, password varchar(255) NOT NULL, fallnamc varchar(255) NOT NULL, iaAdmin boolean NOT KULL tPRIMARY KEY (idThis exception has been logged with id 662c0klcb 如果你同意推荐的SQU脚本,你可以点击 Apply evolutions 按钮执行该建议 脚本。如果使用的是内存数据库 ( db=mem), 并且数据库是空的情况下, Pla
6、y 会自动运行 所有的 evolutions 脚本。同步同时发生的改变现在让我们假定现在在同一项目中有两个开发者,A开发者因工作需要必须创建一个新的数据库表,因此他将 2.sql evolution 脚本:# Add Post# - !UpsCREATE TABLE Post (id bigint(20) NOT NULL AUTO_INCREMENT,title varchar(255) NOT NULL,content text NOT NULL, postedAt date NOT NULL, author_id bigint(20) NOT NULL,FOREIGN KEY (auth
7、or_id) REFERENCES User(id),PRIMARY KEY (id);# - !DownsDROP TABLE Post;Play将应用这个evolution脚本到A开发者的数据库。另外一方面,B开发者因工作需要,必须删除 User表。因此他也将创建2.sql evolution 脚本:# Update User# - !UpsALTER TABLE User ADD age INT;# - !DownsALTER TABLE User DROP age;B开发者结束开发工作后进行了提交(称为 Git)。现在,A开发者在继续开发前 必须合并他的同事的工作,因此他运行 git
8、pull ,但合并操作产生了一个冲突, 如下:Auto-merging db/evolutions/2.sqlCONFLICT (add/add): Merge conflict in db/evolutions/2.sql Automatic merge failed; fix conflicts and then commit the result.每个开发者都创建了一个 2.sql evolution 脚本。因此, A 开发者需要合并这个 文件: devB这个合并操作其实很容易做 :# Add Post and update User# - !UpsALTER TABLE User AD
9、D age INT;CREATE TABLE Post (id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL, content text NOT NULL, postedAt date NOT NULL,author_id bigint(20) NOT NULL,FOREIGN KEY (author_id) REFERENCES User(id),PRIMARY KEY (id);# - !DownsALTER TABLE User DROP age;DROP TABLE Post;这个 evolution 脚
10、本显示为新修订 revision 2 的数据库,这个版本不同于 A 开 发者之前已经应用的修订 2 版本。因此 Play 会察觉到这个情况,并要求 A 开发者通过首先恢复已经应用的旧的修 订 2 版本来同步他的数据库,并应用新的修订 2 版本脚本:+ * * http:/localhost:9000/Your database needs evolution!An SQL script will be run on your database.This SQL script must be run:fl E WARNING! Thia script contains DOWNS evoluti
11、ons that are likely destructives# - Revi21Downs - lbOf5fDROP TABLE Pest;# Rev:2,Ups ?cf7el2ALTER TABLE User ADD ago INT;CREATE TASLE Post (id bigint(20) NOT NULL AUTO INCREMENTt title varchar(25S) NOT NULL?content text NOT NULL, postedAt date NOT NULL, authorid bigint(20) NOT NULL,FOREIGN KEY (autho
12、r_id) REFERENCES Userid PRIMARY KEY (id);Apply evaluiTcnsThis exception has been logged with id 6S2c0klcd数据不一致状态某些时候可能会在evolution脚本里犯错,那么这些脚本就会失效。在这种情况 下,play将标记数据库结构为数据不一致状态,同时要求你在继续工作前手工 解决这个问题。比如,Evolution 脚本的 Ups存在一个错误:# Add ano ther colu mn to User# - !UpsALTER TABLE Userxxx ADD compa ny varcha
13、r(255);# - !Dow nsALTER TABLE User DROP compa ny;因此,试着应用这个evolution将导致失败,play将把数据库结构标记为incon siste nt:Application error+ t * hnp:/localhost:9000/Your database is an inconsistent state!An evolution has not been applied properly. Please check the problem and resolve it manualThis SQL script has been r
14、un, and there was a problem:# - Rev:3fUps - c0d5el7ALTER TABLE Userxxx ADD conipany varchar (255 ;This error has been thrown:Table * te3t*uscrxxx 1 doosn* t exist (EftROR; 1.146, SQLSTATE* 42S02 )Mark it resotvedThis exception has been logged with id 662cDkld3现在要继续工作前,你必须解决这个不一致的问题,因此你就运行了fixed SQL命
15、令:ALTER TABLE User ADD company varchar(255); 之后,通过单击按钮,手工解决了这个标记的问题。但是由于你的 evolution 脚本存在错误, 你或许希望修复这个错误。 因此你修改 了 3.sql 脚本:# Add another column to User# - !UpsALTER TABLE User ADD company varchar(255);# - !DownsALTER TABLE User DROP company;Play 检测到这个新的 evolution ,然后替换了之前的 3 版, 之后将运行下面的 脚本:+ * * hnp
16、:/localhost:9000/Your database needs evolution!An SQL script will be run on your database.This SQL script must be run:# llJ WARNING E Thia script contains DOWNS evolutions that are likely destructives# - Rev:3 r Downs c0d5cl7ALTER TABLE User DROP company;# Rev:3,Ups L5ed3f5ALTER TABLE User ADD compa
17、ny varchar(255 ;Apply evolutionsThis exception has been logged with id 662c0kld7现在所有的问题都已处理好,你又可以继续工作了。在开发模式里,处理这样的问题非常简单,可以直接丢弃现在的开发数据库, 然 后再次重头申请所有的evolutio ns脚本即可。Evoluti ons 命令在DEV模式里,evolutions是交互式执行的。然而在 PRO模式里,在运行应用 程序前,你就必须使用evolutio ns命令来修订你的数据库结构。在生产模式下如果你试着运行一个数据库不是最新版的应用程序时, 应用程序将 不能启动。
18、_ _ | | | | | _ | |/ _ | | |_| | _/|_|_ (_) |_|_/ play! master-localbuild, framework ID is prod Ctrl+C to stop13:33:22 INFO Starting /test13:33:22 INFO Precompiling .13:33:24 WARN 13:33:24 WARN Your database is not up to date.13:33:24 WARN Use play evoluti ons comma nd to man age database evolutions
19、.13:33:24 ERROR 662c6n234Cant start in PROD mode with errorsYour database needs evolution!An SQL script will be run on your database.play.db.Evolutions$InvalidDatabaseRevisionat play.db.Evolutions.checkEvolutionsState(Evolutions.java:323)at play.db.Evolutions.onApplicationStart(Evolutions.java:197)a
20、t play.Play.start(Play.java:452)at play.Play.init(Play.java:298)at play.server.Server.main(Server.java:141)Exception in thread main play.db.Evolutions$InvalidDatabaseRevision atplay.db.Evolutions.checkEvolutionsState(Evolutions.java:323)at play.db.Evolutions.onApplicationStart(Evolutions.java:197)at
21、 play.Play.start(Play.java:452)at play.Play.init(Play.java:298)at play.server.Server.main(Server.java:141)错误消息要求你运行 play evolutions 命令:$ play evolutions _ _ | | | | | _ | |/ _ | | |_| | _/|_|_ (_) |_|_/ play! master-localbuild, framework ID is gbo Application revision is 3 15ed3f5 and Database revision is 0 da39a3e Your database needs evolutions!# - Rev:1,Ups - 6b21167CREATE TABLE User (id bigint(20) NOT NULL AUTO_INCREMENT, email varchar(255) NOT NULL, password varchar(255) NOT NULL, fullname varchar(255) NOT NULL, isAdmin boolean NOT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度物流仓储采购框架协议范本3篇
- 二零二五年度女方净身出户离婚协议书起草流程详解
- 二零二五年度高品质铝合金门窗采购合作协议
- 二零二五年度门卫勤务安排与调整合同
- 3 做个“开心果”2023-2024学年二年级下册道德与法治同步说课稿(统编版)
- 2024-2025学年高中语文 第四单元 铁肩担道义单元高考对接说课稿 语文版必修4
- 2025年度门面房屋租赁合同(含品牌使用权)
- 二零二五年度绿色建筑项目劳务派遣合同范本2篇
- 2025至2030年中国电动盘车机数据监测研究报告
- 2023三年级英语下册 Unit 8 The Ruler Is Long第1课时说课稿 陕旅版(三起)
- 灰坝施工组织设计
- 韩国《寄生虫》电影鉴赏解读
- 三对三篮球赛记录表
- 矿山电工知识点讲解
- 物业公司服务质量检查流程
- 中国心胸外科的历史和现状
- 人教版9年级全一册英语单词表
- 三门峡水利工程案例分析工程伦理
- “1+X”证书制度试点职业技能等级证书全名录
- 《社会主义市场经济理论(第三版)》第八章社会主义市场经济调控论
- 水土保持单元工程质量评定表
评论
0/150
提交评论