play框架手册_19.管理数据库变化Evolution

合集下载

轻量级的高性能Web框架:Play

轻量级的高性能Web框架:Play

Play是一款开源、轻量、无状态、Web友好的架构,使用Java语言编写并遵循MVC模式,集成了当今Web开发所需的组件和API。

此外Play可以给应用程序提供可预测的和最小的资源消耗(CPU,内存,线程),可构建高扩展的应用程序。

目前Play的最新版本是2.1,在该版本中需关注的几点是:移植到Scala 2.1上、Migration to scala.concurrent.Future库,可在Scala中管理异步代码、改进Iteratee API、在项目中可构建更多的模块化代码、为Java API提供更好的线程模型、新增Scala JSON API、Filter API和CSRF保护机制等。

除了上述所描述的这些特征外,最受开发者喜爱的又有哪些呢?不妨来看下:•快速迭代:修改代码、刷新页面立即就能看到•Java和Scala:JVM性能、类型安全、库、IDE/工具支持、活跃的社区•反应:非阻塞I0机制使数据/基于网络的实时数据获取更容易•灵活:支持可插、自定义配置和可定制。

既然Play拥有这么多功能,下面就提供一些示例给大家。

1.创建按照安装说明,创建一个叫play-tutorial的App,使用play new命令:2.运行Appcd到play-tutorial的根目录下,使用play run命令启动服务器,然后在浏览器中输入:http://localhost:9000这时,你可以在IDE里加载和查看play-tutorial源码。

Java培训:3.Hello WroldPlay遵循MVC模式,所以先在app/controllers下创建一个控制器:HelloWorld下面要做的是在浏览器上显示这个controller/action,你可以把这个添加到conf下的routes 文件下。

在浏览器中输入:http://localhost:9000/hello。

最新play框架手册19.管理数据库变化evolution资料

最新play框架手册19.管理数据库变化evolution资料

19.管理数据库变化Evolution当使用关系数据库时,你需要去跟踪和安排数据库schema (结构)变化,特别是有多个存储位置的情况下,你就需要更多的经验来跟踪数据的schema变化:•当处理团队合作进行开发时,每个人都需要知道数据库结构的变化•当部署到生产服务器上时,就需要一个稳健的方式去更新数据库结构•如果在多台数据库服务器上工作时,就需要保持所有数据库结构同步如果在JPA下工作,Hibernate会自动为你处理好这些数据库变化。

如果你不打算使用JPA或打算手工对数据库结构进行更好的调整,那么Evolutions将非常有用。

Evolutio ns 脚本Play使用evolutions 脚本来跟踪你的数据库变化。

这些脚本采用的是原始的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) 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 将被显示出来。

play框架手册-01.Play框架最主要的概念

play框架手册-01.Play框架最主要的概念

01.Play框架最主要的概念MVC应用程序模型Play框架完全遵循MVC模式,MVC模式把应用程序分成几个独立的层:presentation表现层和model模型层,表现层进一步分成view呈现层和controller控制层。

∙Model层是应用程序操作的特定领域展现的信息。

领域逻辑把“领域的意思”添加到原始数据里。

许多应用程序使用持久存储机制,比如数据库来存储数据。

MVC不特别指明数据访问层,因为mvc模型能够理解底层操作,或数据访问层已经被模型进行了封装。

∙View层把model层渲染到一个适当的交互窗体,如典型的用户接口。

一个model可以有多个views,以实现不同的作用。

在一个web应用程序里,view通用渲染成web格式的内容,比如HTML, XML或JSON。

然而,在某些情况下,view也可表示成二进制窗体,比如一个动态渲染的图表。

∙Controller负责响应事件 (通常是用户actions),并对这些事件进行处理,也可能是调用model的修改方法。

在一个Web应用程序里,事件特指http请求:一个专门用于监听http请求的控制器,它从’事件’里提取相关数据,比如查询字符串参数,请求headers… 并把修改结果更新到底层model对象。

在Play应用程序里,这三个层被分别定义到app目录下的三个java包里。

app/controllers控制器就是一个java类,其中的每个public/static方法都是一个Action。

一个action就是一个java入口点,当接收到一个http请求时,这个action就会被调用。

控制器类里的java代码并不真正的面向对象的。

Action方法从http 请求中提取相关的数据,读取或更新model对象,并向http请求者返回一个封装好的response结果。

app/models领域模型对象层(以下简称model)是一系列完全使用java面向对象语言特征的java类,它包含了数据结构和数据操作。

PLAY框架手册 17.PLAY模块和模块仓库

PLAY框架手册 17.PLAY模块和模块仓库

~ Cobertura
~ /modules/cobertura
~ Versions: 1.0
...
在本地使用 play install {module}-{version}命令可以在本地安装模块。在本 地安装模块后就可以模块用于不同的应用程序,而且不需要为每个应用程序复制 备份。这对于大型模块来讲非常有用,这与框架扩展非常相似。
模块 模板可以包含原始的 java 代码,前提是以 jar 文件形式打包到
module/lib 目录下 模块可以包含文档页面 每个模块都是可选的
使用 play new-module 命令可以创建自己的模块。
如何从一个应用程序里加载模块
位于应用程序/modules 目录下的模块是被自动加载,也可使用 dependency management system 来自动管理你的应用程序模块。
比如,在框架里安装 Scala 支持:
2
play install scala-head
我们约定 head 版பைடு நூலகம்就模块的不稳定版本。你也可通过省略版本信息安装默认的 模块版本,如:
play install scala
通过这种方式安装的模块将会直接下载模块到你的框架安装目录下的/modules 文件夹里。
2. 登录到你的 Google account 3. 在 Developer login 下创建一个完整的 Google OpenID URL,如:
https:///accounts/o8/id?id=BItOawk7q69CFhRarQIo
在 play-framework Google Group 页面里传送一个模块注册请求,比如:
为模块增加文档说明
1

PLAY框架知识简介

PLAY框架知识简介
PLAY框架知识简介
2016-12-15
目录页
CONTENTS
目录
1
2 3
主要概念 标准目录结构 Play的下载使用
4 5 6
代码书写规范 项目的运行 项目的总结
Play框架主要概念
MVC设计模式
Play框架采用了良好的MVC设计模式,这个模式把应用层分为三层:模型层(M),控制层(C)和表示层
Play框架使用总结
编译及运行
框架自动编译和重新 装载源文件的任何改 变 注意:新建的类或 model表需要重新运 行项目
报错
发生异常,此框架会 直接显示错误代码, 甚至是模板代码
项目打包部署
app,config,public, lib,需要删除.svn文件 夹
新建play项目
在命令窗口中,输入play new 项目名称 单击回车键,确定项目名称在 单击回车键,项目成功建立。在项目的父目录下运行play eclipsify +项 目名称命令后,可以将新建的项目导入到myeclipse中 App,config,public,lib,test
Play项目包含的文件内容
Play构建web应用的配置
在application.conf 文件中设置项目名称、访问的端口号、连接的数据库信息等
Play构建web应用的配置
在application.conf 文件中设置项目名称、访问的端口号、连接的数据库信息等
Web应用的路径配置
在routes 文件中设置项目访问首页
访问localhost:9004的时候就会指向application类中的index方法
(V)。
M:指业务模型 V:用户界面 C:控制器
PLAY的下载使用 下载play1.2.5包

playframework操作文档

playframework操作文档

一、安装1.先下载playFramework1.3.4版本2.解压playFramework1.3.43.配置playFramework1.3.4的环境。

在windows的高级系统设置--高级--环境变量把解压的路径复制到PATH环境变量里4.安装jdk1.6以及以上的版本,配置环境:JAVA_HOME=C:\Program Files\Java\jdk1.7.0_805.PATH=;%MAVEN_HOME%\bin6.Cmd命令运行play help 看看play是否安装成功。

输入Javac 看看是否按照成功,如果按照成功。

二、建立项目1.成功之后使用(play new 项目名称)命令创建一个项目2然后使用play run运行项目。

你可以用浏览器访问http://localhost:9000 并看到应用的默认页面3.如果你要生成eclipse项目你需要运行命令:play eclipsify 项目名称4.执行上面命令之后,你就可以导入项目到eclipse工作台中。

5.Play 目录结构:App/ 包含应用程序的核心、模型、控制器、视图结构Conf/ 只有包含应用的配置文件,主要的是application.conf、routes两个文件Lib/ 资源库Public/公共资源,包含css/javascript/img等资源Test/ 测试三、添加CRUD1.在conf/application.conf 文件中添加module.crud=${play.path}/modules/crud2.然后在conf/route文件中添加* / module:secure3.在conf/dependencies.yml文件中添加require:- play- play -> crud4.运行play dependencies 命令5.运行play eclipsify命令(ps:因为我使用的是eclipse平台所以运行此命令编译,如果是启用的的平台请使用相对应的编译命令)6.在eclipse平台刷新项目7.其他的导入也和导入CRUD操作一样四、MAVEN的使用1.下载好maven包,进行解压2.配置maven 环境变量MAVEN_HOME=D:\apps\mavenPATH=;%MAVEN_HOME\bin%3.检测maven是否生效,然后运行play install maven命令4.执行完后,修改conf/dependencies.yml,在里面添加-play -> maven head5.然后运行play dependencies命令6.重新运行play eclipsify命令7.使用Play mvn:init创建pom.xml文件五、模块化============================禁用忽略包的方式有三种===========================================1. You can disable transitive dependencies for a particular dependency:# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:transitive: false2. You can disable transitive dependencies for the whole project:# Application dependenciestransitiveDependencies: falserequire:- play 1.2- com.google.guava -> guava r073. You can exclude any specific dependency explicitely:# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:exclude:- com.google.code.findbugs -> *=========================外包应用的三种模式================================1.第一种# Application dependenciesrequire:- play 1.2- com.google.guava -> guava r07:transitive: false- commons-lang 3.0:force: true- com.zenexity -> sso 1.0# My custom repositoriesrepositories:- zenexity:type: httpartifact: "http://llocalhost:端口号/repo/[module]-[revision].[ext]"contains:- com.zenexity -> *第二种You can also add maven2-compatible repositories using the iBiblio type, like this: # Application dependenciesrequire:- play- play -> scala 0.8- org.jbpm -> jbpm-persistence-jpa 5.0.0:exclude:- javassist -> javassist *- org.hibernate -> hibernate-annotations *- javax.persistence -> persistence-api *repositories:- jboss:type: iBiblioroot: "http://llocalhost:端口号/nexus/content/groups/public-jboss/"contains:- org.jbpm -> *- org.drools -> *第三种:require:- play- customModules -> 模块名称和版本号(ps:firstmodule 0.1模块是firstmodule 然后版本号是0.1。

Play框架文档

Play框架文档

优势:1.动态编译。

无论你修改Entity,Controller或者view,都无需重启服务器.2.视图采用了Groovy作为模板引擎,让表示层真正做到了开发高效简洁Play的页面模版有一套非常简单易用的tag机制,复用view非常的方便.3.测试Play可以方便的组织测试数据,而这些数据是一个文本结构,不依赖于特定数据库.也就是说即使你用的是一个内存数据库,你也可以很方便的组织测试数据.4.Play的"缺陷和问题":Play有很多的静态方法,在Controller和Model中都有,静态方法带来的最大麻烦就是难以继承,这是很恶心的一件事情,这一点可能是Play框架的一个硬伤,不知道以后会不会有更正.5.拥有精确的错误定位机制,当错误发生的时候,可以精确的定位到错误代码的位置。

6.速度很快,启动快,运行的速度也十分快部署1.首先下载Play2.解压到D盘3.配置环境变量PATH。

D:\play;4.打开CMD 运行play表示成功.测试1.创建一个工程打开DOS。

输入play new webplay意思是创建一个名字叫webplay 的工程。

但是该工程暂时无法导入ECLIPSE 2. 测试过工程是否成功打开DOS 输入play run webplay意思是测试工程是否运行成功。

下面会提示测试路径。

表示启动成功.3.创建Eclipse 部署文件运行play eclipsify webplay意思是创建eclipse 部署文件4.工程导入到Eclipse跟普通项目导入一样模板1.创建模板2.引用模板应用1.初始化执行方法:初始化执行方法为:具体类执行完index() 方法后,会去找顺序为:views-→action名字-→方法名字.html2.页面调用ACTION 的方法根据上面的提示。

在中找到方法.3.附带参数返回页面配置数据库1.配置数据库连接打开。

找到操作数据库每一个实体类都继承了 Model 类。

java培训-Play框架指南

java培训-Play框架指南

Play框架指南:配置你喜欢的IDE使用 Play 进行工作是很容易的。

你甚至不需要一个复杂的 IDE,因为 Play 会自动地编译和刷新你修改的源文件,所以,你可以使用简单的文本编辑器轻松地进行工作。

使用 Play 进行工作是很容易的。

你甚至不需要一个复杂的 IDE,因为 Play 会自动地编译和刷新你修改的源文件,所以,你可以使用简单的文本编辑器轻松地进行工作。

但是,时髦的 Java IDE 提供了一些很酷且高效的特性,例如自动完成,即时编译,重构辅助和调试。

Play 支持NetBeans, IntelliJ IDEA和Eclipse platforms 平台。

生成 Eclipse 配置文件Play 提供一个生成 Eclipse 配置的命令。

要将 Play 应用转化为 Ecipse 工程,可以使用 eclipsify 命令:1.# play eclipsify myApp然后,你需要使用 File/Import/General/Existing project… 菜单将应用导入到你的工作区中。

eclipsify 命令生成若干个应用程序的启动器(launcher),主启动器(main launcher)只能通过 Eclipse 的 Run As 命令使用。

可以随时通过 Debug As 启动一个调试会话,然后使用 Connect JPDA launcher ,停止调试会话并不会导致服务器终止。

如果你对应用程序做了任何重要的修改,如改变 classpath,则需要使用 eclipsify 重新生成 Eclipse 配置文件。

此外,Play 目录下带有一个 Eclipse 插件,在 support/eclipse/ 目录下,要安装它,只需将你在该目录下找到的JAR 文件,简单地复制到 Eclipse 安装目录的 dropins 文件夹下生成的 Eclipse 配置文件包含了 Play 框架安装目录的绝对路径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

19.管理数据库变化Evolution当使用关系数据库时,你需要去跟踪和安排数据库schema(结构)变化,特别是有多个存储位置的情况下,你就需要更多的经验来跟踪数据的schema变化:∙当处理团队合作进行开发时,每个人都需要知道数据库结构的变化∙当部署到生产服务器上时,就需要一个稳健的方式去更新数据库结构∙如果在多台数据库服务器上工作时,就需要保持所有数据库结构同步如果在JPA下工作,Hibernate会自动为你处理好这些数据库变化。

如果你不打算使用JPA或打算手工对数据库结构进行更好的调整,那么Evolutions将非常有用。

Evolutions脚本Play使用evolutions 脚本来跟踪你的数据库变化。

这些脚本采用的是原始的sql语句来书写的,应该位于应用程序的db/evolutions目录。

第一个脚本名叫1.sql,第二为2.sql,以此类推…每个脚本包含了两部分:∙Ups部分用于描述必要的转换∙Downs部分用于描述如何恢复他们比如,查看第一个evolution脚本,这个脚本用于引导一个基本的应用:# Users schema# --- !UpsCREATE 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 NULL,PRIMARY KEY (id));# --- !DownsDROP TABLE User;正如你看到的一样,必须在sql脚本里使用注释来界定Ups和Downs节。

如果在applictaion.conf里配置了数据库,那么Evolutions将被自动激活,而且evolution scripts将被显示出来。

通过设置evolutions.enabled为false 可以禁此显示脚本。

比如,当测试他们自己的数据库里,你可以为测试环境设置为禁用模式。

当evolutions被激活后,在DEV模式下,Play将为每个请求检查数据库结构状态,或在PROD模式下启动应用程序时进行数据库结构状态检查。

在DEV模式下,如果数据库结构不是最新的,一个错误页面会显示出来,它会建议你运行合适的sql脚本同步你的数据结构。

如果你同意推荐的SQL脚本,你可以点击‘Apply evolutions’按钮执行该建议脚本。

如果使用的是内存数据库(db=mem),并且数据库是空的情况下,Play会自动运行所有的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 (author_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 pull,但合并操作产生了一个冲突,如下:Auto-merging db/evolutions/2.sqlCONFLICT (add/add): Merge conflict in db/evolutions/2.sqlAutomatic merge failed; fix conflicts and then commit the result.每个开发者都创建了一个2.sql evolution脚本。

因此,A开发者需要合并这个文件:<<<<<<< HEAD# 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 (author_id) REFERENCES User(id),PRIMARY KEY (id));# --- !DownsDROP TABLE Post;=======# Update User# --- !UpsALTER TABLE User ADD age INT;# --- !DownsALTER TABLE User DROP age;>>>>>>> devB这个合并操作其实很容易做:# Add Post and update User# --- !UpsALTER TABLE User ADD 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脚本显示为新修订revision 2的数据库,这个版本不同于A开发者之前已经应用的修订2版本。

因此Play会察觉到这个情况,并要求A开发者通过首先恢复已经应用的旧的修订2版本来同步他的数据库,并应用新的修订2版本脚本:数据不一致状态某些时候可能会在evolution脚本里犯错,那么这些脚本就会失效。

在这种情况下,play将标记数据库结构为数据不一致状态,同时要求你在继续工作前手工解决这个问题。

比如,Evolution脚本的Ups存在一个错误:# Add another column to User# --- !UpsALTER TABLE Userxxx ADD company varchar(255);# --- !DownsALTER TABLE User DROP company;因此,试着应用这个evolution将导致失败,play将把数据库结构标记为inconsistent:现在要继续工作前,你必须解决这个不一致的问题,因此你就运行了fixed SQL 命令: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版,之后将运行下面的脚本:现在所有的问题都已处理好,你又可以继续工作了。

在开发模式里,处理这样的问题非常简单,可以直接丢弃现在的开发数据库,然后再次重头申请所有的evolutions脚本即可。

Evolutions 命令在DEV模式里,evolutions是交互式执行的。

然而在PROD模式里,在运行应用程序前,你就必须使用evolutions命令来修订你的数据库结构。

在生产模式下如果你试着运行一个数据库不是最新版的应用程序时,应用程序将不能启动。

~ _ _~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/~~ play! master-localbuild, ~ framework ID is prod~~ Ctrl+C to stop~13:33:22 INFO ~ Starting ~/test13:33:22 INFO ~ Precompiling ...13:33:24 INFO ~ Connected to jdbc:mysql://localhost13:33:24 WARN ~13:33:24 WARN ~ Your database is not up to date.13:33:24 WARN ~ Use `play evolutions` command to manage database evolutions.13:33:24 ERROR ~@662c6n234Can't start in PROD mode with errorsYour database needs evolution!An SQL script will be run on your database.play.db.Evolutions$InvalidDatabaseRevisionatplay.db.Evolutions.checkEvolutionsState(Evolutions.java:323) at play.db.Evolutions.onApplicationStart(Evolutions.java:197)at 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 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~~ Connected to jdbc:mysql://localhost~ 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 NULL,PRIMARY KEY (id));# --- Rev:2,Ups - 9cf7e12ALTER TABLE User ADD 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));# --- Rev:3,Ups - 15ed3f5ALTER TABLE User ADD company varchar(255);#----------------------------------------------------------------------------~ Run `play evolutions:apply` to automatically apply this script to the db~ or apply it yourself and mark it done using `playevolutions:markApplied`~如果你打算让Play自动为你运行evolution,那么要使用如下命令:$ play evolutions:apply如果你喜欢在你的生产数据库上手工运行脚本,那么你需要告诉play你的数据库是最新的:$ play evolutions:markApplied如果在自动运行evolution脚本时存在错误,在DEV模式下,可以手工解决他们,之后标记数据库结构为已修正状态:$ play evolutions:resolve。

相关文档
最新文档