我正在使用Spring Boot和Spring web starter开发一个简单的应用程序.当我使用嵌入式Tomcat服务器(JAR打包)进行测试时,它非常顺利.我需要调试一些东西,所以我认为最好将它作为WAR部署在外部Tomcat服务器上(或者实际上是STS上捆绑的外部Pivotal tc服务器).
我按照Spring Boot的文档中所述的程序进行操作,运行应用程序时,我可以看到日志加载我的控制器,请求等(是吗?不.).一旦容器启动,任何请求都会导致丑陋的404.
我知道Spring Boot会产生符合Servlet 3的容器,所以web.xml不应该严格要求文件.我所要做的就是将我的应用程序的入口点指向一个扩展的类SpringBootServletInitializer.这里是:
package com.company.ci.integration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class GitlabWebhookProcessingApplication extends
SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(GitlabWebhookProcessingApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(GitlabWebhookProcessingApplication.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我把这个类指向我的POM文件,如下所示:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.chemtech.ci.integration.GitlabWebhookProcessingApplication</start-class>
<java.version>1.7</java.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
正如上面的文档所述,这应该神奇地工作,我的应用程序将被加载并按预期工作.
啊,这里是日志:
Servlet映射:
2015-06-07 20:21:16.870 INFO 3373 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2015-06-07 20:21:16.871 INFO …Run Code Online (Sandbox Code Playgroud) 我正在开发一个相当大的应用程序,在套件上有大约260k LOC和大约1800个单元测试.一点背景:
SpringJUnit4ClassRunner运行测试forkCount等于1且reuseForks等于true).这样做我确信我正在使用Spring的静态上下文缓存的优点(ApplicationContext在每个测试中重复使用相同的)当我们在开发虚拟机上运行测试时,使用Oracle JDK 7u79/80,我们会看到非常快速的测试.例如,具有50多种测试方法的相当大的测试类需要大约1:30m(包括上下文初始化时间)才能运行.
我们的基本Dev VM类似于:
我们使用Jenkins作为CI服务器,Maven(3.2)负责构建过程.我们有Master + 2 Slaves架构.所有虚拟机完全相同:
还记得那些通常需要1:30分钟才能运行Eclipse的测试吗?在服务器上,他们需要超过15分钟才能运行!这是我已经尝试过的事情(到目前为止没有成功.):
最重要的是,为什么Surefire的执行比在Eclipse上运行JUnit要慢得多?我现在已经在这几天刮过头了,这真的开始惹恼我了!当解决方案似乎如此接近但是它到目前为止,我讨厌它.
我无法在我的Dev机器上使用Maven进行测试,因为我无法分配所需的所有内存,但是运行大块的类(不是整个1.8k测试套件)仍然比在Eclipse上运行慢得多.
我理解Maven有所有这些阶段等等,但差别不应该是这么大.你不同意吗?
任何输入都将受到高度赞赏.我可以提供您认为必要的更多信息!
PS:Surefire v2.17,Maven 3.2.2,JUnit 4.12,Spring Test 3.2.13
非常感谢!
更新1
我尝试在CI服务器上停用JaCoCo以查看它是否影响了构建时间.它没有.执行时间保持不变.
我们最近开始使用该weblogic.Deployer实用程序体验Weblogic 12c中的部署。我们可以部署EAR,但是只要在托管服务器仍在运行的情况下尝试取消部署该应用程序,它将开始使用100%的CPU(4核Xeon,裸机)。
经过一些修补和无数次线程转储之后,我们可以将问题隔离在4个卡住的线程上。他们每个人在一个核心上消耗了100%。平均负载将在5分钟内从约0.10跳到4.00。
这是似乎被卡住的线程:
"ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" daemon prio=10 tid=0x00007fb52801c800 nid=0x6bf0 runnable [0x00007fb58a0ad000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x00000000e18c66d0> (a sun.nio.ch.Util$2)
- locked <0x00000000e18c66c0> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000e18c6598> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:102)
at weblogic.socket.NIOSocketMuxer.selectFrom(NIOSocketMuxer.java:541)
at weblogic.socket.NIOSocketMuxer.processSockets(NIOSocketMuxer.java:470)
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)
Run Code Online (Sandbox Code Playgroud)
我似乎有很多人遇到相同的问题(不过,不是Weblogic的):
https://github.com/netty/netty/issues/327
https://issues.jboss.org/browse/XNIO-172
我认为这可能不会发生,因为旧的JDK版本。java -version说:
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server …Run Code Online (Sandbox Code Playgroud) java ×3
junit ×1
maven ×1
oracle ×1
servlet-3.0 ×1
spring ×1
spring-mvc ×1
spring-test ×1
tomcat ×1
unit-testing ×1
weblogic ×1
weblogic12c ×1