带底板的Jhipster可执行jar不起作用 - 404

时间:2016-02-19 13:47:30

标签: jhipster

我构建了一个jhipster应用程序。添加了一个实体。用

构建
mvn -Pprod package

当我使用

时,应用程序运行正常
java -jar xyz.war

但是,由于我们需要Undertow用于高负载场景和快速启动时间,所​​以我只是根据Spring文档在所有位置(所有配置文件)中将maven依赖从Tomcat更改为Undertow:{ {3}}

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

从Eclipse运行时运行正常,我可以看到请求现在由Undertow提供,而不是Tomcat,因为日志打印XNIO作为线程ID。

但是,当我再次构建它并尝试使用java -jar xyz.war

运行它时

应用程序启动正常,但是当我点击URL时

http://127.0.0.1:8081 

Using Undertow in Place of Tomcat

它说未找到。

将嵌入了Undertow的jHipster应用程序用于工作还需要做些什么呢?

作为推动jHipster在我们组织中的关键POC的任何快速帮助都取决于这一步骤。

4 个答案:

答案 0 :(得分:3)

我们曾经支持Undertow,但最近删除了它。所以你不应该在设置它时遇到很多麻烦(而你做的看起来不错,那么你就不要发布你的整个配置,这很难说)。 无论如何,关于您的具体用例,您需要知道我们删除Undertow的原因:

  • 启动时间确实较低,大约为300-500毫秒。我们大多在我们的&#34; dev&#34;配置文件,因为启动时间很重要。但是现在我们已经重新启动了Spring Dev Tools,这在任何时候都不再有用。
  • 对于&#34; prod&#34;用法,我没有看到Tomcat和Undertow之间的任何性能差异。与仅一个数据库访问(花费几毫秒)相比,我想你无法看到这种改进。

此外,我们删除了Undertow,因为它缺少一些重要功能。最重要的是:

  • GZip压缩支持 - &gt;因为你会失去这个,你的表现实际上会比Undertow更糟糕,而不是使用Tomcat
  • Websocket支持

最后但并非最不重要的是,通过添加新节点可以轻松扩展您的JHipster应用程序(在JHipster 3.0中更容易),因此处理大量用户不应该是一个问题。

答案 1 :(得分:2)

我没有设置你的错误。 Undertow似乎对我很好。

1)我生成了一个新的JHipster项目(来自master),所有默认选项

2)我只在pom.xml的这一部分替换了tomcat:

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- log configuration -->
            <logback.loglevel>DEBUG</logback.loglevel>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-undertow</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>prod</id>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-undertow</artifactId>
            </dependency>
        </dependencies>

3)建立:

mvn package -Pprod

4)启动数据库:

docker-compose -f src/main/docker/prod.yml up -d

5)启动应用

java -jar target/*.war --spring.profiles.active=prod

:: JHipster   :: Running Spring Boot 1.3.2.RELEASE ::
:: http://jhipster.github.io ::

2016-02-22 00:18:40.051  INFO 6118 --- [           main] com.mycompany.myapp.JhundertowApp        : Starting JhundertowApp on pgrXps with PID 6118 (started by pgrimaud in /home/pgrimaud/workspace/tests2/32-undertow)
2016-02-22 00:18:40.054  INFO 6118 --- [           main] com.mycompany.myapp.JhundertowApp        : The following profiles are active: prod
2016-02-22 00:18:44.024  WARN 6118 --- [           main] io.undertow.websockets.jsr               : UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
2016-02-22 00:18:44.126  WARN 6118 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2016-02-22 00:18:44.742  INFO 6118 --- [           main] c.mycompany.myapp.config.WebConfigurer   : Web application configuration, using profiles: [prod]

6)我更改登录应用程序以确认它与底部

一起运行
----------------------------------------------------------
    Application 'jhundertow' is running! Access URLs:
    Local:      http://127.0.0.1:8080
    External:   http://127.0.1.1:8080
----------------------------------------------------------
2016-02-22 00:20:20.585 TRACE 6118 --- [ XNIO-2 task-31] c.m.m.c.l.AngularCookieLocaleResolver    : Parsed cookie value [%22en%22] into locale 'en'
2016-02-22 00:20:25.741 TRACE 6118 --- [ XNIO-2 task-32] c.m.m.c.l.AngularCookieLocaleResolver    : Parsed cookie value [%22en%22] into locale 'en'

答案 2 :(得分:0)

幸运的是,当我将相同的war文件移动到RHEL系统时,它运行得很好。 :-)我接受@pgrimaud的回答。谢谢@deepu和@Julien。你们真棒。

我会调查我的Win7机器上出了什么问题 - 如果我能弄清楚的话,会在这里回复。 (npm clear cache dint help。将重新安装node.js和npm,因为我已经更新了我的其他node.js工作 - 我会看看是否有帮助)。我还将尝试调试spring-boot-starter-undertow。

答案 3 :(得分:0)

最后,克星的解决方案已经到位。以下是我的更新 - 今天,我开始调试spring boot并提供代码,并意识到spring boot正在寻找以下位置的资源:

private static final String[] SERVLET_RESOURCE_LOCATIONS = { "/" }; 

之后,我在META-INF目录中创建了一个名为resources的文件夹,并使用7zip复制其中的所有资源。 和lo&amp;看哪,它有效! : - )。

虽然spring boot也应该从

加载资源
1.3.3.RELEASE

由于某种原因,它没有这样做。 (这是jHipster放置所有资源文件的地方)

我认为这是jHipster使用的弹簧启动版本的错误,我将我的应用程序Spring启动版本升级到val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit b => import GraphDSL.Implicits._ val source = Source.repeat(1) val start = Source.single(0) val zip = b.add(ZipWith((left: Int, right: Int) => left)) val bcast = b.add(Broadcast[Int](2)) val concat = b.add(Concat[Int]()) source ~> zip.in0 zip.out.map { s => println(s); s } ~> bcast ~> Sink.ignore zip.in1 <~ concat <~ start concat <~ bcast ClosedShape }) g.run() ,但这也无济于事。