我构建了一个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的任何快速帮助都取决于这一步骤。
答案 0 :(得分:3)
我们曾经支持Undertow,但最近删除了它。所以你不应该在设置它时遇到很多麻烦(而你做的看起来不错,那么你就不要发布你的整个配置,这很难说)。 无论如何,关于您的具体用例,您需要知道我们删除Undertow的原因:
此外,我们删除了Undertow,因为它缺少一些重要功能。最重要的是:
最后但并非最不重要的是,通过添加新节点可以轻松扩展您的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()
,但这也无济于事。