本文演示如何用JHipster生成一个单体架构风格的应用。
环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里)
应用名:app1
实体名:role
主机IP:192.168.220.120
首先创建一个应用目录
$ mkdir app1
1 生成工程代码
进入app1目录,输入命令后回车:
$ cd app1/
$ jhipster
命令行输出JHipster启动信息
![]()
现在开始问答环节
1.1 Which type of application would you like to create?
选择生成的应用类型
这是一个单选题,有4个选项,使用上下键切换选项。
因为这个例子是生成单体架构的应用,所以这里选择默认选项Monolithic application,也就是单体架构的应用。
![]()
单击回车继续。
1.2 What is the base name of your application?
输入应用的名称
默认名称是当前目录名app1,也可以自己输入名称;这里使用默认名称。
注意:名称只能是大小写字母,数字和下划线的任意组合,不允许任何其它字符。
![]()
单击回车继续。
1.3 What is your default Java package name?
输入应用的java包名
默认java包名是com.mycompany.myapp,也可以自己输入包名;这里使用默认包名。
注意:包名要符合Java标准规范的要求。
![]()
单击回车继续。
1.4 Do you want to use the JHipster Registry to configure, monitor and scale your application?
是否需要使用JHipster Registry来实现应用的配置,监控和弹性缩放?
这是一个单选题,有2个选项,使用上下键切换选项。
因为这个例子是生成单体架构的应用,不需要以上特性,所以这里选择默认选项No。
![]()
单击回车继续。
1.5 Which type of authentication would you like to use?
选择应用的认证类型
这是一个单选题,有3个选项,使用上下键切换选项。
对于无状态的单体应用,JWT最适合,所以这里选择默认选项JWT authentication。
![]()
单击回车继续。
1.6 Which type of database would you like to use?
选择使用的数据库类型
这是一个单选题,有4个选项,使用上下键切换选项。
可以看到支持的数据库类型很多,这里选择默认选项SQL。
![]()
单击回车继续。
1.7 Which production database would you like to use?
选择生产环境中使用的数据库
这是一个单选题,有5个选项,使用上下键切换选项。
可以看到目前支持5种SQL数据库,这里选择默认选项MySQL。
![]()
单击回车继续。
1.8 Which development database would you like to use?
选择开发环境中使用的数据库
这是一个单选题,有3个选项,使用上下键切换选项。
H2调试起来简单,但为了和生产环境保持一致性,这里选择MySQL。
![]()
单击回车继续。
1.9 Do you want to use the Spring cache abstraction?
是否需要使用Spring Cache?
这是一个单选题,有5个选项,使用上下键切换选项。
对于单体架构的应用,不考虑多个实例的场景,使用本地缓存最简单,所以这里选择Yes, with the Ehcache implementation (local cache, for a single node)。
![]()
单击回车继续。
1.10 Do you want to use Hibernate 2nd level cache?
是否需要使用Hibernate二级缓存?
默认选择是Y,如果不需要使用,输入n;这里选择默认选项Y。
注意:这个问题和上一个问题(1.9)的选择有关联性,上一个问题的不同选择,会导致后续不同问题的出现。
![]()
单击回车继续。
1.11 Would you like to use Maven or Gradle for building the backend?
选择使用Maven还是Gradle来构建应用
这是一个单选题,有2个选项,使用上下键切换选项。
根据自己的开发环境需要,选择相应的构建工具,这里选择默认选项Maven。
![]()
单击回车继续。
1.12 Which other technologies would you like to use?
选择需要用到的技术组件
这是一个多选题,有4个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的技术架构规划,选择相应的技术组件,也可以都不选择。
![]()
单击回车继续。
1.13 Which Framework would you like to use for the client?
选择前端框架
这是一个单选题,有2个选项,使用上下键切换选项。
根据自己的技术架构规划,选择相应的前端框架,这里选择默认选项Angular 6。
![]()
单击回车继续。
1.14 Would you like to enable SASS support using the LibSass stylesheet preprocessor?
是否需要启用样式表预处理来支持SASS?
默认选择是N,如果需要启用,输入y;这里选择默认选项N。
![]()
单击回车继续。
1.15 Would you like to enable internationalization support?
是否需要国际化支持?
默认选择是Y,如果不需要,输入n;这里选择默认选项Y。
![]()
单击回车继续。
1.16 Please choose the native language of the application
选择国际化支持中的母语
这是一个单选题,有37个选项,使用上下键切换选项。
注意:这个问题和上一个问题(1.15)的选择有关联性,上一个问题如果选择n,这个问题不会出现。
![]()
单击回车继续。
1.17 Please choose additional languages to install
选择国际化支持中的其它语言
这是一个多选题,有37个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的业务规划,选择相应的语言,也可以都不选择。
![]()
单击回车继续。
1.18 Besides JUnit and Jest, which testing frameworks would you like to use?
选择单元测试工具
这是一个多选题,有2个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的技术架构规划,选择相应的技术组件,也可以都不选择。
![]()
单击回车继续。
1.19 Would you like to install other generators from the JHipster Marketplace?
是否需要从JHipster市场中安装其它的开发工具?
默认选择是N,如果需要启用,输入y;这里选择默认选项N。
![]()
单击回车继续。
问答结束,开始生成工程代码
这个过程可能会有点长,根据电脑性能和网速的不同,通常需要3-5分钟。
![]()
至此,生成工程代码成功完成。可以在app1根目录下查看所有生成的文件。
2 生成实体代码
接下来,创建一个实体表role,并生成相关的后端代码和前端资源。
在开始之前,通常需要先把数据库设计完成,一般情况下不需要手工添加id字段,JHipster默认会生成一个自增的int类型的id主键。
进入app1目录,输入命令后回车:
$ cd app1/
$ jhipster entity role
命令行输出实体已创建
![]()
现在开始创建字段
2.1 Do you want to add a field to your entity?
是否需要添加一个字段到实体?
默认选择是Y,如果不需要添加,输入n;这里选择默认选项Y。
![]()
单击回车继续。
2.2 What is the name of your field?
输入字段名
这里输入第一个字段名roleName,字段名要符合之前所选择的数据库的命名规范。
注意:这个问题和上一个问题(2.1)的选择有关联性,上一个问题如果选择n,这个问题不会出现。
![]()
单击回车继续。
2.3 What is the type of your field?
选择字段类型
这是一个单选题,有12个选项,使用上下键切换选项。
根据你的数据库设计,选择相应类型,这里选择String类型。
![]()
单击回车继续。
2.4 Do you want to add validation rules to your field?
是否需要为这个字段添加规则?
默认选择是N,如果需要添加,输入y;这里选择默认选项N。
![]()
单击回车继续。
2.5 Do you want to add a field to your entity?
是否需要继续添加字段?
成功添加完一个字段后,重新回到了第一个问题(2.1)。如果选择Y,会重复2.1 ~ 2.4的过程;如果选择n,则进入新的问题;这里输入n。
![]()
单击回车继续。
2.6 Do you want to add a relationship to another entity?
是否需要添加一个与别的实体的关联关系?
默认选择是Y,如果不需要添加,输入n;因为目前还没有生成别的实体,这里输入n。
![]()
单击回车继续。
2.7 Do you want to use separate service class for your business logic?
是否需要使用独立的service层来封装业务逻辑?
这是一个单选题,有3个选项,使用上下键切换选项。
三个选项的意思分别是不用service层,使用service类,使用service接口和实现类;这里选择Yes, generate a separate service class。
![]()
单击回车继续。
2.8 Do you want to use a Data Transfer Object (DTO)?
是否需要使用DTO?
这是一个单选题,有2个选项,使用上下键切换选项。
如果选择No, use the entity directly,可能会带来一些前后端耦合和传输效率的问题;所以这里选择[BETA] Yes, generate a DTO with MapStruct,虽然还是BETA版本,但实际项目中使用没出现什么问题。
![]()
单击回车继续。
2.9 Do you want to add filtering?
是否需要添加筛选功能?
这是一个单选题,有2个选项,使用上下键切换选项。
如果选择添加筛选功能,代码中会添加JPA动态查询的逻辑,但实际代码还需要手动修改,也许将来新版本会不断完善这个功能;这里为了简单起见,选择Not needed。
![]()
单击回车继续。
2.10 Do you want pagination on your entity?
是否需要分页功能?
这是一个单选题,有3个选项,使用上下键切换选项。
第2个选项适合Web UI,第3个选项适合Mobile UI;这里选择Yes, with pagination links。
![]()
单击回车继续。
问答结束,开始生成实体代码
这个过程中会提示与已有文件有冲突,需要选择处理方式,提示的输入选项是Ynaxdh,说明如下:
Y: yes (Default)
n: no
a: yes to this question and all others (or always yes).
x: abort (exit)
d: show the differences between the old and the new file
h: help, list all options
这里选择a;
![]()
单击回车。实体代码生成过程比较快,通常1-2分钟就能完成。
![]()
至此,生成实体代码成功完成。可以执行maven测试命令来验证整个工程代码(如果生成工程代码时选择的构建工具是Maven)
$ mvn test
如果一切正常,命令行会输出成功信息:
![]()
3 生成前端资源
之前在生成工程代码时选择的前端组件是Angular,所以前端资源会按如下流程生成:
a, 生成工程代码或者实体代码的任务完成后,会自动触发执行yarn install;
b, yarn install执行完成后,会自动触发执行webpack:build;
c, webpack:build执行完成后,所有前端资源就已经生成了,默认是在app1/target/www目录下。
调试前端页面
进入app1目录,输入命令后回车:
$ cd app1/
$ yarn start
如果一切正常,会启动Webpack dev-server;
![]()
可通过浏览器访问http://192.168.220.120:9000查看前端调试页面。此时所有前端资源的修改,都会同步更新到浏览器上。
![]()
4 数据库配置
4.1 启动一个数据库容器
在命令行,任意目录下,启动一个mysql容器;如果本地没有mysql:5的镜像,容器启动时会自动去docker store下载镜像。
$ docker container run --name app1-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 32768:3306 mysql:5
4.2 在数据库中创建schema
通过客户端连接上刚启动的数据库容器,添加一个名为app1的schema。应用启动时会自动在这个schema里面创建数据表。
4.3 修改应用的数据库配置
spring.datasource.url中的端口号32768,与步骤4.1中-p参数指定的值保持一致。
spring.datasource.url中的schema名称app1,与步骤4.2中添加的schema名称保持一致。
spring.datasource.password的值my-secret-pw,与步骤4.1中MYSQL_ROOT_PASSWORD参数指定的值保持一致。
$ cd app1/
$ vi src/main/resources/config/application-dev.yml
# 修改数据库连接相关配置
spring:
datasource:
url: jdbc:mysql://localhost:32768/app1?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: my-secret-pw
5 构建和启动
5.1 构建
进入app1目录,输入命令后回车:
$ cd app1/
$ mvn -Pdev package
如果一切正常,命令行会输出构建成功信息:
![]()
5.2 启动
进入app1目录,输入命令后回车:
nohup ./target/app-1-0.0.1-SNAPSHOT.war &
通过tail命令,查看启动日志:
$ tail -f nohup.out
如果一切正常,日志会输出启动成功信息:
![]()
6 访问应用UI
6.1 访问首页
通过浏览器访问http://192.168.220.120:8080,进入应用的首页:
![]()
点击右上角账号 - 登录, 默认用户名和密码都是admin。
6.2 实体页面
登录之后可以看到页头上的菜单,数据菜单下就是所有实体的操作页面,这里能看到生成的实体role的子菜单:
![]()
点击role子菜单,进入role实体的操作页面,这里已经生成了基本的增删改查功能,如果需要更多功能,就要定制开发了:
![]()
6.3 管理页面
这里包括了如下功能页面:
- 用户管理
- 资源监控
- 服务状态
- 配置
- 审核
- 日志
- API
![]()
页面功能都很直观,点进去看一看就知道了。
6.4 语言页面
这里就是国际化支持的页面,生成工程代码时选择了哪些语言,这里就会提供哪些语言的子菜单:
![]()
相关文章
JHipster生成微服务架构的应用栈