Spring Roo 簡介

一直以來,Java/Spring開發被認為是笨重的代表,無法快速生成項目原型和骨架。所以,Spring推出了Spring Roo這個項目,幫助我們快速生成項目原型。本文參考自Spring Roo的官方文檔,如果熟悉英文的話可以直接看原文檔,內容更加豐富。

安裝

安裝命令行工具

Spring Roo是一套命令行工具,如果你使用的是Eclipse/STS,還可以使用Eclipse對應的插件。

首先先來下載命令行工具。到下載頁面,選擇對應版本下載。這里我選擇的是最新的2.0.0.RC1 ,畢竟我有更新強迫癥。下載完成之后解壓,會得到一個文件夾,其中bin目錄下就是Spring Roo的可執行文件了。可以看到它有batsh兩種格式,可以在不同系統上運行。為了方便以后在終端窗口運行,我建議同時將這個文件夾添加到環境變量中。

安裝好之后,打開命令提示符或者其他終端窗口,輸入roo命令,就可以啟動Roo了。值得提一點,Roo會在命令提示符對應的文件夾位置創建項目,所以如果需要在特定位置創建項目,先在命令提示符中切換到該文件夾,然后再啟動Roo。

img_56b26cdd1a45cabc38963a73f3ab8dfc.png
Roo命令行工具

安裝Eclipse插件

打開你的Eclipse/STS,然后遵循以下步驟:

  1. 點擊菜單欄 Help ? Install New Software
  2. 點擊 Available Software sites
  3. 點擊 Import 按鈕
  4. 找到 "$ROO_HOME/conf/sts-sites-bookmarks.xml" 并確定,這里$ROO_HOME是你安裝Roo的目錄
  5. 根據需要選擇對應的版本
  6. 在過濾欄輸入roo
  7. 選中功能 Spring IDE Roo Support
  8. 然后一路確定并允許條款
  9. 最后重啟IDE即可

下面是官方文檔的圖,如果有疑問照著這張圖來就行了。

img_8087a3fcad33e554550a4d19e478fb5f.png
官方文檔截圖

到這一步還沒完,插件是安裝好了,但是還沒有配置。其實要配置的也很簡單,告訴插件你的Roo工具安裝到哪里就行了。點擊 Window ? Preferences ? Spring ? Roo Support ,打開設置,然后照著官方文檔截圖設置好你的工具路徑即可。

img_5701c98565ee8b27dd28a8d94ec576ed.png
官方文檔設置截圖

這樣插件就設置完畢了。其實這個插件也沒啥作用,就是在Eclipse中開了一個窗口,能運行Roo命令,和直接在命令提示符中運行其實是一樣的。

使用Roo

運行Roo腳本

$ROO_HOME\samples文件夾下有三個示例項目腳本,使用Roo運行它們可以快速創建相應的項目。如果沒有耐心,可以直接從這里開始。

img_50a5f98ecd9a5bb6eaf63f375ed62a65.png
示例項目腳本

比如說,我要運行clinic實例項目,就可以輸入以下命令:

roo> script --file clinic.roo

稍等片刻,程序就會創建完畢。

img_106192b2ae855bebfa67996200361cc3.png
Roo運行結果

最后創建出的是一個基于Maven的Spring Boot程序。在IDEA下是這么一個樣子。可以看到項目中有一個名字叫log.roo的日志文件,它記錄了這個Roo腳本執行的內容。另外不知道為什么程序在IDEA下會有一點報錯,不過不影響編譯和運行。

img_98f2657f12d4499c778864b9d2f725b8.png
程序代碼截圖

這個PetClinic示例程序使用了Spring Security來保護頁面。我查閱了一下,Spring Boot下Spring Security默認的用戶名是user,密碼則在程序啟動的時候隨機輸出到控制臺中。最后運行截圖如下,大家可以自己運行和測試一下這個程序。

img_6e941efbf7c79139678cf2aa1ccf947e.png
運行截圖

腳本解釋

下面來解釋一下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 BIRDenum 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.Visitfocus --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.VetInforepository 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 THYMELEAFweb mvc language --code es

然后使用了Spring Security保護了一下程序。第一行的是使用Spring Security的默認配置,用戶名是user,密碼是打印在控制臺的隨機字符串。第二行配置了一下用戶權限,只有管理員角色的用戶才能執行刪除操作。

security setup --provider DEFAULTsecurity 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://www.pswp.cn/news/257919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雙緩沖 android,Android 的 SurfaceView 雙緩沖應用

075 int index 0;本文引用地址:http://www.eepw.com.cn/article/201610/305442.htm076 try {077 index field.getInt(R.drawable.class);078 } catch (IllegalArgumentException e) {079 // TODO Auto-generated catch block080 e.printStackTrace();081 } catch …

Windows—JDK安裝與環境變量配置

本文介紹JDK的安裝與環境變量配置。 工具/原料 JDK1.8.0_65WIN7 32bitjdk-8u65-windows-i586.exe方法/步驟 安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java文件夾中的不同文件夾中。&…

典型案例道出“服務臺”的價值

引 言:作為運營管理著龐大IT系統的CIO,相信您或多或少都嘗試過,或正建有IT服務臺(或幫助臺),然而您可能依然面臨服務效率低下,用戶滿意度欠佳的 困擾。這其中的原因,多半就在于您的服…

數據的藝術

數據的藝術概念:數據 --程序操作的對象,用于描述客觀事物。數據的特點:a. 可以輸入到計算機b. 可以被計算機程序處理*數據是一個抽象的概念,將其進行分類得到程序設計語言中的類型。數據元素 -組成數據的基本單位a. 數據項:一個數據元素由若干數據項組成…

處理ajax的session超時

做web開發時,當session超時時,如果不是ajax請求,很簡單就能實現跳到指定的頁面。但是ajax請求就會有問題。session超時的時候,點擊到ajax請求就會彈出一些頁面源碼文件。 首先建了個攔截器,來判斷session超時。用戶登錄…

菜根譚#249

色欲火熾,而一念及病時便興似寒灰; 名利飴甘,而一想到死地便味如嚼蠟。 故人常憂死慮病,亦可消幻業而長道心。轉載于:https://www.cnblogs.com/star4knight/p/4154590.html

實現物聯網項目,你需要提前知道的6件事情

目前為止,對于大多數尋求數字化與服務化轉型的制造商來說,實現物聯網應用項目仍然是一個很大的挑戰。 我們此前做過一項研究,到2016年底,全球企業級物聯網項目將超過10000個。但是其中大部分的項目都還是處于初期概念驗證(PoC)階段&#xff0…

android腳本快捷方式,Android:如何創建主屏幕快捷方式啟動shell腳本?

答案:您的問題的答案應該是GScript(開放源代碼和“根除設備上的任何地方”),但是當腳本完成時,誰想要盯著該模態終端輸出屏幕?詳情如下.> SManager (free version)將讓您將自定義腳本存儲在設備的任何位置,即使您使用根設備的內部存儲也是如此.它將允…

讀書 文摘 筆記

鳳凰項目: 一個IT運維的傳奇故事 微信商城開發實戰 跨境電商多平臺運營 活出生命的意義 托馬斯阿爾瓦愛迪生 奇跡的一生 阿爾伯特愛因斯坦 固執 自信 專利局 我的世界觀 愛因斯坦 艾薩克牛頓 母親讓牛頓停學在家務農,贍養家庭。但牛頓一有機會便埋首書卷&#…

修改Visual Stdio 2010界面,以及添加一些其它VS2010的插件

打開 Tools\Extension Manager(工具\擴展管理器)。 點聯機庫。 搜索“visual studio color theme editor”,就能看到一個名為“visual studio color theme editor”的擴展, 下載安裝好這個擴展,重新啟動 Visual Studio…

【NOIP2013】貨車運輸

Description A 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。 Input…

殺死應用進程 android,如何殺死Android應用程序啟動的logcat進程?

我有Android應用程序,在Service啟動實現后面跟著代碼:...Process process Runtime.getRuntime().exec("logcat -v time -s " arg);BufferedReader bufferedReader new BufferedReader(new InputStreamReader(process.getInputStream()));...如您所見,我…

Android筆記(六十七) 自定義控件

實際編程中,系統提供的控件往往無法滿足我們的需求,一來是樣子丑陋,二來是一些復雜的組合需要多次使用的話,每次都寫一堆控件的組合會很耗費時間,所以我們將這些組件的組合自定義為一個新的控件,以后使用的…

android 7.0原生room,小米5S 安卓9.0 原生體驗 LineageOS16.0 ROOT

介紹ROM為第三方編譯安卓9.0 LineageOS16.0 ,基本功能正常,如有其他bug,理性對待使用Magisk ROOT授權刷機完成后請務必到設置中手動設置當前系統時間和時區去網絡圖標上面的感嘆號和x號方法:打開CaptiveMgr軟件--自動彈出授權彈窗…

圖---互斥集

互斥集主要用于Kruskal算法中,用于求圖的最小生成樹。 互斥集主要有3個基本操作: 1. 初始化各個集合 Make(a)p[a] ← a 2. 查找各個集合的老祖宗 Find(a)if a p[a] : return aelse : return Find(p[a]) 3. 合并兩個集合 Union(a, b)p[Find(b)]…

Oracle配置監聽要注意的地方

昨天心血來潮,把Oracle的監聽都刪了,準備重新配一遍,結果弄了一天才配好,不過對Oracle的了解更深了一些。 對昨天的問題做一個總結: 1、直接在NetManager中刪掉監聽時,實際的監聽服務好像并沒有完全刪除&am…

signature=486e34400687432217e65e837b8e6753,PXE常見錯誤代碼表

在我們日常做無盤時,通常都會遇到一些這樣或那樣的問題,不過好在一般這些錯誤都會有些錯誤代碼,我們可以通過錯誤代碼查詢到一些有幫助的信息。下面是我轉載的一些PXE驅動錯誤代碼表,遇到PXE錯誤時,可查詢下看看&#…

12月25號 Category類別

Category類別 1.在已有類的基礎上進行擴展,無需像繼承一樣子類化,就可以直接添加一些方法 2.繼承不僅可以添加方法還可以添加屬性,類別只能添加方法 3.類別不會改變現有類的方法,萬一重寫,自己寫的優先級高 4.把類別中…

17---Net基礎加強

更新中,敬請期待。。。。。。。。。。。。 復習 將xml顯示到treeview 修改增加 刪除 foreach原理 深拷貝與淺拷貝 模擬數據庫及登陸 復習總結轉載于:https://www.cnblogs.com/yechangzhong-826217795/p/4157562.html

Linux系統rootpassword改動

重新啟動系統。 進入系統引導界面: 按下e鍵: 選擇第二項。內核啟動參數設置,按下e鍵: 在結尾處,輸入數字 1或者 英文 " single",再回車: 按下b鍵啟動。此時以單用戶模式級別引導啟動程…