jhipster简单来说是一个基于nodejs+yeoman的java代码生成器。往大了说是基于java的一套微服务解决方案。请注意是一整套的微服务解决方案。jhipster在整个程序架构上都做好了整合,包括前端mvvm框架(angularjs),前端构建工具(gulp)到后端的微服务框架(spring cloud)和hibernate/mongodb,再到单元测试/ui测试。
1.安装nodejs。
2.安装yeoman/bower/gulp npm install -g yo bower gulp-cli
3.安装jhipster npm install -g generator-jhipster
cd 到你想存放代码的路径,然后运行:yo jhipster
这时候jhipster向导就会启动了,如图:
第一个选择很重要,项目类型要选择 microservice application
后面的根据实际情况,选择就可以。失败了也没关系,删掉文件夹重新来过。
接着出现交互问答,以便按照开发者要求去生成代码,实现应用的功能:
src/main/resources/config/application-prod.yml
文件密切相关。src/main/resources/config/application-dev.yml
文件。回车。然后一步步到结束,jhispter会产生一些列代码框架。生成成功后运行 ./mvnw 或者 gradlew 下载依赖包。
import->Maven->Existing Maven Projects
,然后 ->next
,->browse
,选中项目导入,finish
。src/main/resources/config/application-dev.yml
文件中配置的一致即可)。要检查这个文件里面的mysql连接配置,保证它能访问你的mysqll database.Run As
->Run on Server
,选中配置好的tomcat,->next
,->finish
启动后,在浏览器中访问http://localhost:8080/testjhipster/
,注意:不要少了最后面的斜杠。注意:默认的登录名和密码都是admin。
此时发现,Entities导航没有任何实体。接下来通过了解如何插入实体,从而更深入的了解testjhipster项目的内部目录结构。
实体是应用中的基本对象。创建实体的步骤如下:
yo jhipster:entity author
,回车。前端的主要代码都在src/main/webapp
下,未建实体时,其下的目录结构如下
ebapp
├── index.html - Application starting page that loads everything
├── bower_components - Dependencies retrieved by bower
├── assets
│ ├── fonts - Fonts
│ ├── images - Images
│ ├── styles - CSS stylesheets
├── scripts
│ ├── app - App specific components go in here
│ │ ├── app.js - Main script
│ │ ├── app.constants.js - Constants generated by build
│ │ ├── main
│ │ │ ├── main.js - Component's definition like a state/route
│ │ │ ├── main.controller.js - Component's controller
│ │ │ ├── main.html - Component's view
│ │ │
│ ├── components - Our reusable components, non-specific to our app
│ │ ├── navbar
│ │ │ ├── navbar.js
│ │ │ ├── navbar.controller.js
│ │ │ ├── navbar.directive.js
│ │ │ ├── navbar.html
│ │ ├── util - Generic components like filters to format data
├── i18n - Translation files //如果选择加入翻译的话,就有这个目录。
当创建实体author后,在script下多了一个entities:
scripts
├── app
│ ├── entities
│ │ ├── author - Main location of the CRUD front-end for author
│ │ │ ├── authors.html - View to display the list of author entities
│ │ │ ├── author-detail.html - View to display details of one author entity
│ │ │ ├── author.js - States for list and details
│ │ │ ├── author.controller.js - Controller of the list view
│ │ │ ├── author-detail.controller.js - Controller of the detailed view
├── components
│ ├── entities
│ │ ├── author
│ │ │ ├── author.service.js - Service to access the Foo REST resource
i18n - 如果选择加入翻译的话,就有这个目录。
├── en - 英语
│ ├── author.json - English translation of author name, fields, ...
| |—— global.json
├── fr - 法语
│ ├── foo.json - French translation of Foo name, fields, ...
| |—— global.json
后台主要的CRUD操作代码在com.mytest.testjhipster.web.rest
包下,当然其中有许多库文件在背后支持。
补充:
src/main/resources/config/liquibase/changelog
这个目录下拥有生成实体表结构的xml文件。他们在src/main/resources/config/liquibase/master.xml
文件中被引用。src/main/resources/config/
下的两个配置文件application-dev.yml
和application-prod.yml
与数据库的链接紧密相关。src/main/webapp/scripts/components/navbar
下的navbar.html文件就是页面中顶端的导航栏。在其中更改导航栏的代码,就可以实现一些操作:
前端
src/main/webapp/scripts/components/navbar/navbar.html
文件中会在entities对应的菜单项中添加一个author菜单子项。**1**src/main/webapp/scripts/app/entities
文件夹下会生成一个文件夹author
,这里面存放author实体CRUD操作对应的页面以及js页面。**2**如果支持translate功能,那么在src/main/webapp/i18n
文件夹下的所有不同语种的文件夹(cn
和ZH
)下,会生成一个author.json文件,里面对应了翻译的译文。只需更改即可。在同样这两个文件夹下,global.json文件也会被插入一条语句:”author”:”author”(label以及对应的译文)。
Note: *1*:如果不存在entitis菜单项,这个添加的这行内容,就可能会被添加到此文件代码的第一行,从而导致页面错乱,此时就需要自己去更改!。 *
2*:如果不存在entities菜单项,这个实体文件夹中的所有js文件中可能会出现一个问题,所有的$uiModelInstace应该手动改为$modelInstance。这个是实战中发现的,原理有待学习AnjularJS再去总结。
后台
com.mytest.testjhipster.repository
包中,会生成一个类文件AuthorRepository.java
,该借口继承JpaRepository
,封装CRUD的底层操作。com.mytest.testjhipster.web.rest
包中,会添加一个类AuthorResource.java
文件。其中是对该实体CRUD操作的后台代码,它调用了前面的AuthorRepository.java中的接口。com.mytest.testjhipster.service
包下,会生成对应这个实体的类文件,其中自己实现一些逻辑代码。逻辑代码的作用,有待进一步了解。配置文件
src/main/resources/config/liquibase/changelog
目录下,将会生成该实体author对应建表的xml文件。此外,在src/main/resources/config/liquibase/master.xml
文件中,会增加一条代码,对上面的xml文件进行引用,实现配置。
如果不存在entities,那么可能master.xml中生成的该条引用代码就会被添加到第一行,导致结构错误,程序报错,需要手动添加到正确的位置。
参考文档:
【jhipster学习心得】https://blog.csdn.net/dongfangyihaolan/article/details/51415973
【jhipster微服务--简单demo】http://www.cnblogs.com/wuya/p/jhipster-microservice-spring-cloud-demo.html
【JHipster 微服务架构】http://m635674608.iteye.com/blog/2314907