用 JHipster 生成的应用的升级小技巧

JHipster的基本介绍就不说了,官方网址是: https://www.jhipster.tech

关于用它生产的应用程序如何进行升级,看这里:https://www.jhipster.tech/upgrading-an-application/

由于它是一个代码生成器,因此每次升级会覆盖原有代码,如果对生产的代码修改得多,那么升级要解决的冲突就多。

因此,第一个要点,就是尽量把自己新增加的业务逻辑写在另外的文件中,尽量少修改生成的那部分代码。所采用的技巧,是 side by side 的方式,具体可以参考:https://www.jhipster.tech/tips/035_tip_combine_generation_and_custom_code.html#pattern-3—side-by-side

第二个要点,具体升级的时候,如果你经常修改 entity 定义(譬如因为字段删改、重命名等导致 .jhipster文件夹下的 json 文件修改)等文件,那么建议升级之前先删除 jhipster_upgrade 分支。换句话说,每次升级都是以当前版本的 entity 定义为基础,如此可以避免很多不必要的 entity 文件相关的冲突。具体解释理由:如果以比较早以前就生成了的 jhipster_upgrade 分支为基础来升级,而这个分支里面留存的 entity 定义又是很早的版本,那么就会生成不一样的 entity 文件,导致需要进行冲突解决。

JHipster项目集成Gitlab CI自动测试遇到的错误

使用 JHipster 生成的项目用 gitlab CI 做自动测试、发布。根据jhipster官方文档进行了操作,在项目根目录下生成了.gitlab-ci.yml文件,同时根据 Gitlab 文档,在一台 Windows Server 2008 环境下安装了Runner。安装过程中配置了私有Gitlab地址,runner的token,也配置了Executor为shell。安装好Runner后发现runner已经能够自动去运行了,不过gitlab中看到build遇到了个错误,maven build 报错,具体为执行.gitlab-ci.yml中这一句:export MAVEN_USER_HOME=`pwd`/.maven的时候,报错,输出信息是乱码,状态码是9009。研究后解决了,发现官方文档少了个提示,runner如果跑在windows 平台,且executor选 shell 的话,应在gitlab-runner根目录下的config.toml 中设置 shell=’powershell’,不然会报错。应该是 export MAVEN_USER_HOME=`pwd`/.maven 的时候,取不到 `pwd` 的值的问题。可以参考有人遇到过类似问题:http://www.cnblogs.com/xishuai/p/gitlab-ci.html

初次使用 JHipster

安装不难,Yarn,Yeoman 等都装上,按官方文档都装好。

然后运行 yo jhipster 来根据向导生成程序。用的是git shell,不知为什么,互动的过程键盘方向键输入异常,而且界面上字符显示还出现了叠加,所以一路回车,大致按照默认值生成了程序。

(此处特别友情提醒,后来经测试查明,jHipster的生成向导在Git Shell下运作不正常,无法进行菜单选择,在Windows Power Shell下显示正常,其它类型的终端暂未测试)

然后,运行yarn start启动前端,界面能正常显示。运行mnvw启动服务器端的时候出现了问题:

1,一开始是解压缩maven压缩文件的报错,网上搜了一下,说把对应的user/.m2/下面的相关文件夹删除,果然好了;

2,然后看报错信息,mysql连不上,应该是向导生成的默认配置跟实际服务器不一致,这个需要修改一下配置,修改src\main\resources\config\application-dev.yml里面的对应节点即可;

3,报zookeeper连不上,下载zookeeper了之后,在本机安装,按照官方文档,新建了zoo.cfg文件,然后运行bin\zkServer.cmd start启动,结果报错:

2017-04-30 20:48:44,016 [myid:] - WARN  [main:QuorumPeerMain@113] - Either no config or no quorum defined in config, running  in standalone mode
2017-04-30 20:48:44,135 [myid:] - ERROR [main:ZooKeeperServerMain@55] - Invalid arguments, exiting abnormally
java.lang.NumberFormatException: For input string: "C:\zookeeper-3.4.10\bin\..\conf\zoo.cfg"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:580)
        at java.lang.Integer.parseInt(Integer.java:615)
        at org.apache.zookeeper.server.ServerConfig.parse(ServerConfig.java:59)
        at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:84)
        at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:53)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)

花了半小时才搞清楚,原来Windows下,用zkServer.cmd启动服务,不需要加start参数就可以了。。。

然后。。。zookeeper是运行起来了,但是启动jhipster服务器还是报错,如下:

org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids

夜深了,留下问题暂未解决。

第二天重新创建了程序,在生成向导中先没有选择服务注册和发现,这样避开使用zookeeper的问题。先把jhipster跑起来,以后再慢慢解决连接zookeeper报错的问题。