本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈。
环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里)
应用栈名称:appstack
认证微服务: uaa
业务微服务:microservice1
网关微服务:gateway
实体名:role
主机IP:192.168.220.120html
进入appstack/microservice1目录,输入命令后回车:前端
$ cd appstack/microservice1/ $ jhipster
选择生成的微服务类型
这是一个单选题,有4个选项,使用上下键切换选项。
这里选择Microservice application
,全部自定义业务逻辑的微服务均可以选择这个类型。java
单击回车继续。mysql
输入微服务的名称
默认名称是当前目录名microservice1
,也能够本身输入名称。
注意:名称只能是大小写字母,数字和下划线的任意组合,不容许任何其它字符。git
单击回车继续。github
输入微服务的端口号
默认端口号是8081
,也能够本身输入端口号,注意不要和别的微服务和进程的端口号冲突。spring
单击回车继续。sql
输入微服务的java包名
根据整个应用栈的目录层级,这里输入包名com.mycompany.appstack
。
注意:包名要符合Java标准规范的要求。docker
单击回车继续。数据库
选择一个服务发现组件
这是一个单选题,有3个选项,使用上下键切换选项。
根据微服务体系规划,这里选择JHipster Registry
。
单击回车继续。
选择使用的认证类型
这是一个单选题,有3个选项,使用上下键切换选项。
根据微服务体系规划,这里选择Authentication with JHipster UAA server (the server must be generated separately)
。
单击回车继续。
输入uaa微服务所在的路径
这是一个相对于microservice1的相对路径,默认路径是../uaa
,这就是咱们以前生成uaa工程的目录所在;若是以前生成的uaa目录名是myuaa,那么这里要输入../myuaa
。
注意:这个问题和上一个问题(1.6)的选择有关联性,上一个问题的不一样选择,会致使后续不一样问题的出现。
单击回车继续。
选择使用的数据库类型
这是一个单选题,有4个选项,使用上下键切换选项。
能够看到支持的数据库类型不少,这里选择默认选项SQL
。
单击回车继续。
选择生产环境中使用的数据库
这是一个单选题,有5个选项,使用上下键切换选项。
能够看到目前支持5种SQL数据库,这里选择默认选项MySQL
。
单击回车继续。
选择开发环境中使用的数据库
这是一个单选题,有3个选项,使用上下键切换选项。
H2调试起来简单,但为了和生产环境保持一致性,这里选择MySQL
。
单击回车继续。
是否须要使用Spring Cache?
这是一个单选题,有5个选项,使用上下键切换选项。
根据实际场景须要,能够选择不一样缓存组件;这里简单起见,选择No - Warning, when using an SQL database, this will disable the Hibernate 2nd level cache!
。
单击回车继续。
选择使用Maven仍是Gradle来构建微服务
这是一个单选题,有2个选项,使用上下键切换选项。
根据本身的开发环境须要,选择相应的构建工具,这里选择默认选项Maven
。
单击回车继续。
选择须要用到的技术组件
这是一个多选题,有4个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据本身的技术架构规划,选择相应的技术组件,也能够都不选择。
单击回车继续。
是否须要国际化支持?
默认选择是Y
,若是不须要,输入n
;这里选择默认选项Y
。
单击回车继续。
选择国际化支持中的母语
这是一个单选题,有37个选项,使用上下键切换选项。
注意:这个问题和上一个问题(1.14)的选择有关联性,上一个问题若是选择n
,这个问题不会出现。
单击回车继续。
选择国际化支持中的其它语言
这是一个多选题,有37个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据本身的业务规划,选择相应的语言,也能够都不选择。
单击回车继续。
选择单元测试工具
这是一个多选题,有2个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据本身的技术架构规划,选择相应的技术组件,也能够都不选择。
单击回车继续。
是否须要从JHipster市场中安装其它的开发工具?
默认选择是N
,若是须要启用,输入y
;这里选择默认选项N
。
单击回车继续。
这个过程,根据电脑性能和网速的不一样,一般须要1-3分钟。
至此,生成业务微服务工程代码成功完成。能够在appstack/microservice1目录下查看全部生成的文件。
接下来,建立一个实体表role,并生成相关的后端代码。
在开始以前,一般须要先把数据库设计完成,通常状况下不须要手工添加id字段,JHipster默认会生成一个自增的int类型的id主键。
进入microservice1目录,输入命令后回车:
$ cd microservice1/ $ jhipster entity role
是否须要添加一个字段到实体?
默认选择是Y
,若是不须要添加,输入n
;这里选择默认选项Y
。
单击回车继续。
输入字段名
这里输入第一个字段名roleName
,字段名要符合以前所选择的数据库的命名规范。
注意:这个问题和上一个问题(2.1)的选择有关联性,上一个问题若是选择n,这个问题不会出现。
单击回车继续。
选择字段类型
这是一个单选题,有12个选项,使用上下键切换选项。
根据你的数据库设计,选择相应类型,这里选择String
类型。
单击回车继续。
是否须要为这个字段添加规则?
默认选择是N
,若是须要添加,输入y
;这里选择默认选项N
。
单击回车继续。
是否须要继续添加字段?
成功添加完一个字段后,从新回到了第一个问题(2.1)。若是选择Y
,会重复2.1 ~ 2.4的过程;若是选择n
,则进入新的问题;这里输入n
。
单击回车继续。
是否须要添加一个与别的实体的关联关系?
默认选择是Y
,若是不须要添加,输入n
;由于目前尚未生成别的实体,这里输入n
。
单击回车继续。
是否须要使用独立的service层来封装业务逻辑?
这是一个单选题,有3个选项,使用上下键切换选项。
三个选项的意思分别是不用service层,使用service类,使用service接口和实现类;这里选择Yes, generate a separate service class
。
单击回车继续。
是否须要使用DTO?
这是一个单选题,有2个选项,使用上下键切换选项。
若是选择No, use the entity directly
,可能会带来一些先后端耦合和传输效率的问题;因此这里选择[BETA] Yes, generate a DTO with MapStruct
,虽然仍是BETA版本,但实际项目中使用没出现什么问题。
单击回车继续。
是否须要添加筛选功能?
这是一个单选题,有2个选项,使用上下键切换选项。
若是选择添加筛选功能,代码中会添加JPA动态查询的逻辑,但实际代码还须要手动修改,也许未来新版本会不断完善这个功能;这里为了简单起见,选择Not needed
。
单击回车继续。
是否须要分页功能?
这是一个单选题,有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
若是一切正常,命令行会输出成功信息:
在命令行,任意目录下,启动一个mysql容器;若是本地没有mysql:5的镜像,容器启动时会自动去docker store下载镜像。
$ docker container run --name microservice1-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 32700:3306 mysql:5
经过客户端链接上刚启动的数据库容器,添加一个名为microservice1
的schema。微服务启动时会自动在这个schema里面建立数据表。
spring.datasource.url中的端口号32700
,与步骤2.1中-p参数指定的值保持一致。
spring.datasource.url中的schema名称microservice1
,与步骤2.2中添加的schema名称保持一致。
spring.datasource.password的值my-secret-pw
,与步骤2.1中MYSQL_ROOT_PASSWORD
参数指定的值保持一致。
$ cd microservice1/ $ vi src/main/resources/config/application-dev.yml # 修改数据库链接相关配置 spring: datasource: url: jdbc:mysql://localhost:32700/microservice1?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: my-secret-pw
进入microservice1目录,输入命令后回车:
$ cd microservice1/ $ mvn -Pdev package
若是一切正常,命令行会输出构建成功信息:
进入microservice1目录,输入命令后回车:
$ nohup ./target/microservice-1-0.0.1-SNAPSHOT.war &
经过tail命令,查看启动日志:
$ tail -f nohup.out
若是一切正常,日志会输出启动成功信息:
启动完成后,能够经过浏览器访问http://192.168.220.120:8761
,登陆名和密码默认都是admin
:
能够看到在Instances Registered区域,microservice1已经注册。
注意:选择生成Microservice application
类型的微服务时,不会生成前端资源,这也符合微服务架构的设计思想;若是须要生成微服务中实体(role)的前端资源,会在网关微服务中生成。
JHipster生成微服务架构的应用栈(一)- 准备工做
JHipster生成微服务架构的应用栈(二)- 认证微服务示例
JHipster生成微服务架构的应用栈(三)- 业务微服务示例
JHipster生成微服务架构的应用栈(四)- 网关微服务示例
JHipster生成微服务架构的应用栈(五)- 容器编排示例