我的目标是设置一个jetty测试服务器并注入一个自定义servlet来测试我项目中的一些REST类。我能够使用spring xml启动服务器并对该服务器运行测试。我遇到的问题有时在服务器启动后,进程在运行测试之前就停止了。看来码头没有去背景。它每次都在我的电脑上工作。但是当我部署到我的CI服务器时,它不起作用。当我在VPN上时它也不起作用。 (奇怪的)。
服务器应该在测试停止时完成初始化,我能够使用浏览器访问服务器。
这是我的spring上下文xml: ....
<bean id="servletHolder" class="org.eclipse.jetty.servlet.ServletHolder">
<constructor-arg ref="courseApiServlet"/>
</bean>
<bean id="servletHandler" class="org.eclipse.jetty.servlet.ServletContextHandler"/>
<!-- Adding the servlet holders to the handlers -->
<bean id="servletHandlerSetter" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="servletHandler"/>
<property name="targetMethod" value="addServlet"/>
<property name="arguments">
<list>
<ref bean="servletHolder"/>
<value>/*</value>
</list>
</property>
</bean>
<bean id="httpTestServer" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop" depends-on="servletHandlerSetter">
<property name="connectors">
<list>
<bean class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<property name="port" value="#{settings['webservice.server.port']}" />
</bean>
</list>
</property>
<property name="handler">
<ref bean="servletHandler" />
</property>
</bean>
运行最新的Jetty 8.1.8服务器和Spring 3.1.3。有什么想法吗?
答案 0 :(得分:1)
我明白了。我的错。我的REST客户端连接到的测试Web服务器(jetty)的IP地址设置为仅供本地主机使用的内部IP地址(不是localhost)。这就是为什么当我在VPN或CI服务器上时测试无法启动的原因。
xml实际上正在工作,我认为它比在separate ant task中启动jetty更好。因为spring管理码头的生命周期。测试完成后,弹簧将自动关闭码头。
答案 1 :(得分:0)
如果您正在使用Maven,您可以让jetty-maven-plugin启动并停止Jetty作为构建过程的一部分。您像往常一样创建Spring项目,将插件添加到.pom文件中。 mvn jetty:run允许您运行未组合的Web应用程序,mvn jetty:run-war允许您运行.war文件。我想你真正想要的是让Jetty在预集成测试阶段开始并在后集成测试阶段(ref)停止:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>