jhipster
欢迎回到本JHipster教程系列! 在第一部分中,我们介绍了如何创建整体应用程序。 在第二部分中 ,我们逐步创建了一个微服务应用程序(这有点复杂)。
对于那些正在努力使JHipster正常运转的人,我想着重介绍一些设置事项和“陷阱”。 因此,对于那些决定尝试JHipster并尝试使用它的人来说,这个小博客更像是一个帮助者。 这就是我们将在此博客文章中讨论的内容,希望我能帮助您最大程度地缩短起步速度。
MySQL作为数据库。
但是我不想使用内存数据库...
因此,内存数据库非常适合进行测试和入门。 但让我们面对现实吧,内存不太可能用于生产场景。 有时,我认为应该将其完全删除。
无论如何,使用mySQL数据库非常简单,您只需对其进行配置。 真的没有太大的痛苦。
如果您在构建过程中从选择中选择了MySQL,那么大部分工作将为您完成。 您只需要插入您的信息即可。
datasource:url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&useSSL=falsename:username: usernamepassword: passhikari:data-source-properties:cachePrepStmts: trueprepStmtCacheSize: 250prepStmtCacheSqlLimit: 2048useServerPrepStmts: truejpa:database-platform: org.hibernate.dialect.MySQL5InnoDBDialectdatabase: MYSQLshow-sql: trueproperties:hibernate.cache.use_second_level_cache: truehibernate.cache.use_query_cache: falsehibernate.generate_statistics: truehibernate.cache.region.factory_class: com.wwc.extendedday.config.hazelcast.HazelcastCacheRegionFactoryhibernate.cache.use_minimal_puts: truehibernate.cache.hazelcast.use_lite_member: true
格林菲尔德schmeenfield…
当然,由于我们都有一个绿色的字段数据库,因此为您设置的列命名约定很好。 整理您的餐桌将变得轻而易举。
好吧,好吧,我知道,在现实世界中成为绿色应用的可能性很小。 通常,某个地方已经有一个数据库,其中的列名很好。 可能您已经有一个要重用的数据访问层,因为我们都讨厌“再次”这样做。
因此,唯一的问题是,在启动和/或尝试获取数据时,您会不断收到该列不存在的错误。 到底是什么造成了这场噩梦?
经过数小时的搜索(相信我做到了),我突然意识到我以前已经处理过这种愚蠢的行为。 默认的命名策略必须更改! 缺省值为SpringNamingStrategy
并且必须更改为EJB3NamingStrategy
,该EJB3NamingStrategy
将尊重具有给定(或不明确)列名的所有注释。 如果您要重用的原始代码是使用SpringNamingStrategy
生成的,则只需忽略此SpringNamingStrategy
,然后继续进行即可。 否则,请在相应的application.yml
文件中找到它并进行更改。
jpa:open-in-view: falsehibernate:ddl-auto: none#naming-strategy: org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategynaming-strategy: org.hibernate.cfg.EJB3NamingStrategy
在旧橡树上系一条缎带。
功能区超时
因此,您已经启动并正在运行,并且想要将数据输出到页面,但是它会一直超时! Aaarrgggghhhh !!! 您的数据太多!
因此,默认情况下,超时非常快。 但是,让我们面对现实吧,大多数客户希望所有数据都在一个呼叫中通过。 再次,我在这里为您服务!
我搜索了相当长的时间来延长超时时间。 我为此找到了正确的配置。 您可以通过多种方式来执行此操作,但是此“修复”为所有呼叫提供了更多时间。 看看这个!
eureka:instance:appname: ExtendedDayGatewayinstanceId: ExtendedDayGateway:${spring.application.instance_id:${random.value}}ribbon:eureka:enabled: truezuul:host:connect-timeout-millis: 10000socket-timeout-millis: 60000hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 60000
您看不到,对不起...
给它一些方向。
如果您已将项目作为微服务启动并运行,但是由于未经授权的调用而无法使数据端点向您提供数据,请确保已正确设置服务。
默认情况下,生成的服务假定端点在同一项目中。 您必须花时间给正确的方向。 因此,在service
文件中,您必须在调用之前添加端点API名称。 在此示例中, extendeddayapi
是端点的名称。
(function() {'use strict';angular.module('extendedDayGatewayApp').factory('Students', Students);Students.$inject = ['$resource'];function Students ($resource) {var resourceUrl = 'extendeddayapi/api/students';return $resource(resourceUrl, {}, {'query': { method: 'GET', isArray: true},'get': {method: 'GET',transformResponse: function (data) {if (data) {data = angular.fromJson(data);}return data;}},'update': { method:'PUT' }});}
})();
没有存款,没有回报。
某些人可能不希望通过JHipster应用程序等使用Angular前端。如果采用这种方法,请确保将令牌传递给您正在对后端进行的所有调用。 登录后可以检索JWT令牌,并将其传递给所有后续调用。
有很多不同的方法可以做到这一点。 我将把您留在这里的设备上。 通过JHipster登录后,将生成JWT令牌。 您应该能够通过查看身份验证呼叫的响应来进行检索。 您会注意到“授权”字段及其后的值。 它将从“ Bearer”开始,然后是一个长令牌。
这是一个邮递员介绍,向您展示它的外观。 将授权值传递给它并测试您的呼叫。 这可以在您的代码中以某种方式复制,以便您可以访问应用程序内的JWT令牌。 这完全取决于您要如何进行。
仅供参考:邮差是一种工具,使您无需创建任何代码即可测试GET,POST等。
这是螺丝刀,不是锤子
这些工具可以为您提供帮助。
JHipster随附的工具箱允许您生成新实体。 您可以生成整个套件和kaboodle(正反),也可以只选择正反。 鉴于我已经准备好将后端用于新的前端,因此我尝试了前端生成器,它对您有所帮助。 该示例不包括后端代码。
yo jhipster:entity student --skip-server
生成的代码如下所示。
这是消除基础知识的好工具。 实际上,仅当您将JHipster Angular应用程序用作前端时,它才有帮助。
再见了再见
这样就结束了JHipster传奇。 我知道此助手列表很短,但对我来说却非常耗时。
继续,与大家分享
不知道从哪里开始我对JHipster的想法的概述。 考虑到真正进入该市场的机会有限,我只会给我“第一印象”。
很大…
开箱即用的东西数量很大,但还不算很多。 看到所有这些东西都是开箱即用的,不知道它在做什么,这是令人畏惧的。 尽管我喜欢拥有所有这些功能,但我觉得我没有时间学习所有功能,或者至少足够舒适地向提出要求的人解释这些功能。
我们可以换个角度...
我不是Angular的忠实粉丝。 公平地说,我没有过多地研究它。 JHipster使用Angular 1有点令人沮丧,但是Angular 2可用。 作为一个新手,我宁愿学习“未来”,也不愿停留在过去。 我知道您可以使用React JS的一种风格,但是同样,有些人可能对此表示反对。 为什么我需要JHipster为我承担前端堆栈?
启动缓慢...
我没有检查这里是否还有其他选项,但是在构建整体式或网关应用程序时,npm install和bower install非常慢。 有点关了。 我想赶紧启动该应用程序。 但是,相比之下,实际上每个应用程序只执行一次。 所以这有点折腾。
给它启动...
这是一个良好的启动。 到目前为止,我非常喜欢使用Spring Boot。 它使使用Web应用程序变得非常容易。 无需费力地将工具安装到IDE中,就可以使用所选的任何服务器。 只需启动它,它的工作就非常简单。 Spring Boot的最大缺点可能是它在运行多个线程时开始消耗内存。
诚实的反馈…
在玩了一段时间之后,我确实喜欢它的微服务方面。 对我来说,创建所有这些面向服务的应用程序似乎是一个好主意。 我不是100%出售JHipster的需求,但我愿意尝试一下。 我可能只想制作一个简单的SPA,即可提供后端,并为前端提供一些非常简单的东西,例如BackboneJS。 我决不排除Angular或React,但是这是我必须花多少时间学习新知识的一个方面。
我将尽力将现有的单片应用程序(JSF)过渡到JHipster和微服务体系结构。 也许它将提供另一个机会为每个人写我的经验博客。
感谢您抽出宝贵的时间阅读! 祝你好运!
翻译自: https://www.javacodegeeks.com/2016/10/getting-started-jhipster-part-3.html
jhipster