spring Roo安装使用简介
作者:过了即是客 发布时间:2023-04-10 09:31:50
一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮助我们快速生成项目原型。本文参考自Spring Roo的官方文档,如果熟悉英文的话可以直接看原文档,内容更加丰富。
安装
安装命令行工具
Spring Roo是一套命令行工具,如果你使用的是Eclipse/STS,还可以使用Eclipse对应的插件。
首先先来下载命令行工具。到下载页面,选择对应版本下载。这里我选择的是最新的2.0.0.RC1 ,毕竟我有更新强迫症。下载完成之后解压,会得到一个文件夹,其中bin目录下就是Spring Roo的可执行文件了。可以看到它有bat和sh两种格式,可以在不同系统上运行。为了方便以后在终端窗口运行,我建议同时将这个文件夹添加到环境变量中。
安装好之后,打开命令提示符或者其他终端窗口,输入roo命令,就可以启动Roo了。值得提一点,Roo会在命令提示符对应的文件夹位置创建项目,所以如果需要在特定位置创建项目,先在命令提示符中切换到该文件夹,然后再启动Roo。
安装Eclipse插件
打开你的Eclipse/STS,然后遵循以下步骤:
点击菜单栏 Help ▸ Install New Software
点击 Available Software sites
点击 Import 按钮
找到 “$ROO_HOME/conf/sts-sites-bookmarks.xml” 并确定,这里$ROO_HOME是你安装Roo的目录
根据需要选择对应的版本
在过滤栏输入roo
选 * 能 Spring IDE Roo Support
然后一路确定并允许条款
最后重启IDE即可
下面是官方文档的图,如果有疑问照着这张图来就行了。
到这一步还没完,插件是安装好了,但是还没有配置。其实要配置的也很简单,告诉插件你的Roo工具安装到哪里就行了。点击 Window ▸ Preferences ▸ Spring ▸ Roo Support ,打开设置,然后照着官方文档截图设置好你的工具路径即可。
这样插件就设置完毕了。其实这个插件也没啥作用,就是在Eclipse中开了一个窗口,能运行Roo命令,和直接在命令提示符中运行其实是一样的。
使用Roo
运行Roo脚本
$ROO_HOME\samples文件夹下有三个示例项目脚本,使用Roo运行它们可以快速创建相应的项目。如果没有耐心,可以直接从这里开始。
比如说,我要运行clinic实例项目,就可以输入以下命令:
roo> script --file clinic.roo
稍等片刻,程序就会创建完毕。
最后创建出的是一个基于Maven的Spring Boot程序。在IDEA下是这么一个样子。可以看到项目中有一个名字叫log.roo的日志文件,它记录了这个Roo脚本执行的内容。另外不知道为什么程序在IDEA下会有一点报错,不过不影响编译和运行。
这个PetClinic示例程序使用了Spring Security来保护页面。我查阅了一下,Spring Boot下Spring Security默认的用户名是user,密码则在程序启动的时候随机输出到控制台中。最后运行截图如下,大家可以自己运行和测试一下这个程序。
脚本解释
下面来解释一下PetClinic这个程序的Roo脚本,让我们来看看Roo是如何工作的。这里只做一下简单解释,如果需要详细资料的话可以参考官方文档的附录,完整介绍了Roo的各种命令和参数以及用法。
首先是创建项目并指定顶级包名,这样会创建一个基于Maven的Spring Boot项目。
project setup --topLevelPackage org.springframework.roo.petclinic
然后是指定JPA存储类型,这里用的是Hibernate,数据库是存储在内存的HSQLDB。当然也可以使用其它数据库,不过相应地需要增加用户名等其他参数。
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
然后是几个枚举类,将会在实体类中用到,这里的~指代前面设置的顶级包名。
enum type --class ~.domain.reference.PetType
enum constant --name DOG
enum constant --name CAT
enum constant --name BIRD
enum type --class ~.domain.reference.Specialty
enum constant --name CARDIOLOGY
enum constant --name DENTISTRY
enum constant --name NUTRITION
然后是项目中的几个实体类。
entity jpa --class ~.domain.Pet --sequenceName PET_SEQ --entityFormatExpression "#{name} (#{type})"
entity jpa --class ~.domain.Visit --sequenceName VISIT_SEQ --entityFormatMessage visit_format
entity jpa --class ~.domain.AbstractPerson --abstract
entity jpa --class ~.domain.Vet --extends ~.domain.AbstractPerson --entityFormatExpression "#{lastName} (#{specialty})"
entity jpa --class ~.domain.Owner --extends ~.domain.AbstractPerson --entityFormatExpression "#{lastName} (#{city})"
之后的叫本详细设置了每个实体类的属性以及对应关系,由于比较多所以我只挑选了几个典型的。在设置实体类之前,需要使用focus命令指定要设置的实体类。
focus --class ~.domain.Pet
field boolean --fieldName sendReminders --notNull --primitive
field string --fieldName name --notNull --sizeMin 1
field number --fieldName weight --type java.lang.Float --notNull --min 0
field enum --fieldName type --type ~.domain.reference.PetType --notNull
field set --fieldName visits --type ~.domain.Visit
focus --class ~.domain.AbstractPerson
field string --fieldName firstName --sizeMin 3 --sizeMax 30
field string --fieldName lastName --notNull --sizeMin 3 --sizeMax 30
field string --fieldName address --notNull --sizeMax 50 --sizeMin 1
field string --fieldName city --notNull --sizeMax 30
field string --fieldName telephone --notNull
field string --fieldName homePage --sizeMax 30
field string --fieldName email --sizeMax 30 --sizeMin 6
field date --fieldName birthDay --type java.util.Date --notNull
然后设置实体类之间的投影关系并设置JPA Repository。
entity projection --class ~.domain.VetInfo --entity ~.domain.Vet --fields id,firstName,lastName,specialty --entityFormatExpression "#{firstName} #{lastName}"
repository jpa --entity ~.domain.Vet --interface ~.repository.VetRepository --defaultReturnType ~.domain.VetInfo
repository jpa --all --package ~.repository
service --all --apiPackage ~.service.api --implPackage ~.service.impl
然后是设置DTO(数据传输对象),它和页面中的表单等信息对应,然后在后台转换为相应的实体类。在这里还可以指定finder,也就是查询条件,查询条件的规则请参考Spring Data JPA的相关内容。
dto --class ~.domain.PetNameAndWeightFormBean
field string --fieldName name
field number --fieldName weight --type java.lang.Float
finder add --entity ~.domain.Pet --name findByNameAndWeight --formBean ~.domain.PetNameAndWeightFormBean
然后是设置Spring Web MVC,这里指定Thymeleaf作为视图层,并为所有控制器生成JSON和Thymeleaf视图。
web mvc setup
web mvc view setup --type THYMELEAF
web mvc controller --all --responseType JSON
web mvc controller --all --responseType THYMELEAF
然后是生成查询和详情页面。这里针对前面设置的所有查询条件生成相应的查询页面,然后生成指定实体类的详情页面。最后指定了页面语言,目前好像只支持英语和西班牙语。
// Publishing finders
web mvc finder --all --responseType THYMELEAF
// Adding details
web mvc detail --entity ~.domain.Owner --field pets --views list,show,findByCityLike --responseType THYMELEAF
web mvc detail --all --views list,show --responseType THYMELEAF
web mvc language --code es
然后使用了Spring Security保护了一下程序。第一行的是使用Spring Security的默认配置,用户名是user,密码是打印在控制台的随机字符串。第二行配置了一下用户权限,只有管理员角色的用户才能执行删除操作。
security setup --provider DEFAULT
security authorize --class ~.service.impl.OwnerServiceImpl --method delete.* --roles ADMIN
然后启用了审计功能,程序会自动记录相应实体类的编辑时间和编辑者。
jpa audit setup
jpa audit add --entity ~.domain.Pet
jpa audit add --entity ~.domain.Owner
jpa audit add --entity ~.domain.Visit
jpa audit add --entity ~.domain.Vet
然后启用了Web服务端点功能,这些端点可以在/servicesURL下查看。
ws endpoint --service ~.service.api.OwnerService --sei ~.ws.api.OwnerWebService --class ~.ws.endpoint.OwnerWebServiceEndpoint --config ~.config.WsEndpointsConfiguration
ws endpoint --service ~.service.api.PetService --sei ~.ws.api.PetWebService --class ~.ws.endpoint.PetWebServiceEndpoint --config ~.config.WsEndpointsConfiguration
最后自动为这些实体类和服务生成单元测试和集成测试。
// Generating unitary tests for all entities
test unit --class ~.domain.Owner
test unit --class ~.domain.Pet
test unit --class ~.domain.Vet
test unit --class ~.domain.Visit
// Repository integration tests
test integration --class ~.repository.VetRepository
test integration --class ~.repository.OwnerRepository
test integration --class ~.repository.VisitRepository
test integration --class ~.repository.PetRepository
// Controller integration tests
test integration --class ~.web.OwnersCollectionJsonController
test integration --class ~.web.PetsItemJsonController
test integration --class ~.web.VetsCollectionThymeleafController
test integration --class ~.web.VisitsItemThymeleafController
来源:http://blog.csdn.net/u011054333/article/details/75949728


猜你喜欢
- maven使用exec插件运行java main方法,以下是3种不同的操作方式。一、从命令行运行1、运行前先编译代码,exec:java不会
- 前几天写了一篇《SpringBoot如何统一后端返回格式?老鸟们都是这样玩的!》阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,
- 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖。某公司高级面试题(20
- 由于对运算符重载不是多么理解诶,于是就百度了一下,结果发现一个解释很有趣的百度知道,分享看看。回答:+-*/这样的运算符重定义,比如你自定义
- 多点触摸技术在实际开发过程中,用的最多的就是放大缩小功能。比如有一些图片浏览器,就可以用多个手指在屏幕上操作,对图片进行放大或者缩小。再比如
- 先来看看效果图跳动的小球做这个动画,需掌握: 1、属性动画  
- 最近的项目中,想做到一种能够吸引眼球的一种角色选择浏览效果Demo源码:点击打开链接最终实现了下按如下图这么一种浏览效果:效果图一效果图二可
- 首先,必须要强调的一点,MD5不是加密算法,而是消息摘要算法,具有不可逆性。字符串通过MD5处理后会生成128位的二进制串。我们通常会将其转
- 本文实例为大家分享了PhotoView实现图片多点触控效果展示的具体代码,供大家参考,具体内容如下效果:点击后能够自由缩放、平移;添加依赖:
- 本文实例为大家分享了Spring MVC多文件上传的具体代码,供大家参考,具体内容如下1)创建工程并导入JAR包2)创建多文件选择页面在 W
- 本文实例讲述了android从资源文件中读取文件流并显示的方法。分享给大家供大家参考。具体如下:在android中,假如有的文本文件,比如T
- 本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下:CREATE PROCEDURE [dbo].[GetNameById
- SpringBoot 集成 activiti 基础环境搭建添加依赖<dependency> <groupId&g
- yml配置规则属性跟属性值之间使用“:”和一个“空格”隔开,
- 一、前言在spring中,定义rabbitMq的消费者可以相当方便,只需要在消息处理类或者类方法加上@RabbitListener注解,指定
- 本文实例讲述了C#简单实现防止多个程序运行的方法。分享给大家供大家参考,具体如下:/// <summary>/// 应用程序的主
- 线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程
- 话不多说,请看实例代码String ip = request.getHeader("x-forwarded-for");
- 1.如下图中的检测值存到数据库是科学计数法2 经过代码处理后3 只需要对你读到的字符串进行如下操作BigDecimal bd = new B
- 本文实例为大家分享了C#获取计算机信息的具体代码,供大家参考,具体内容如下using System;using System.Configu