小编Gus*_*mos的帖子

Spring Boot MVC应用程序在部署到外部Tomcat/tc Server实例时返回HTTP 404

我正在使用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)

java spring tomcat spring-mvc servlet-3.0

8
推荐指数
1
解决办法
6960
查看次数

JUnit测试:为什么Maven(Surefire)比在Eclipse上运行慢得多?

我正在开发一个相当大的应用程序,在套件上有大约260k LOC和大约1800个单元测试.一点背景:

  1. 多模块Maven项目
  2. 所有测试都在一个单独的模块上运行,JaCoCo用于检查覆盖范围.
  3. 测试在一些套件中组合在一起,然后套件包含在Surefire的配置中.
  4. 使用SpringJUnit4ClassRunner运行测试
  5. Surefire目前配置为使用相同的VM来构建和测试(forkCount等于1且reuseForks等于true).这样做我确信我正在使用Spring的静态上下文缓存的优点(ApplicationContext在每个测试中重复使用相同的)

当我们在开发虚拟机上运行测试时,使用Oracle JDK 7u79/80,我们会看到非常快速的测试.例如,具有50多种测试方法的相当大的测试类需要大约1:30m(包括上下文初始化时间)才能运行.

我们的基本Dev VM类似于:

  • 双核i5处理器(带超线程,4个虚拟线程)
  • 8GB RAM
  • 中档,SATA硬盘(5k或7k2 RPM)
  • 在客户端模式下运行Oracle JDK的 Windows 7 x64 (-client)

我们使用Jenkins作为CI服务器,Maven(3.2)负责构建过程.我们有Master + 2 Slaves架构.所有虚拟机完全相同:

  • 8个Xeon E5核心​​(真核)
  • 8 GB RAM
  • 为虚拟机提供服务的SSD LUN(平均吞吐量为1.2GB/s)
  • Debian Linux 8 x64
  • 服务器模式下的Oracle JDK

还记得那些通常需要1:30分钟才能运行Eclipse的测试吗?在服务器上,他们需要超过15分钟才能运行!这是我已经尝试过的事情(到目前为止没有成功.):

  • 将MAVEN_OPTS设置为固定堆大小(2GB堆),大型PermGen空间,调整GC设置,/ dev/urandom作为随机种子
  • 安装了32位JDK以使用我们在Dev Machines上使用的相同客户端模式
  • 调整Surefire的配置以增加内存,调整GC等(因为我不再使用分叉的VM来运行测试,所以我把它拿出来因为它不会改变任何东西.)

最重要的是,为什么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以查看它是否影响了构建时间.它没有.执行时间保持不变.

java junit unit-testing spring-test maven

6
推荐指数
1
解决办法
4575
查看次数

weblogic.socket.Muxer使用100%cpu

我们最近开始使用该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

为什么select()会在程序中消耗大量CPU时间?

我认为这可能不会发生,因为旧的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 oracle multithreading weblogic weblogic12c

5
推荐指数
2
解决办法
4830
查看次数