Travis构建Spring Boot项目报java.net.ConnectException连接被拒绝如何解决
问题原因与修复方案
核心原因
这个错误本质是测试执行阶段,Spring Boot应用没有在Travis CI环境的8080端口正常启动,RestAssured发起接口请求时没有对应的服务响应,所以抛出连接拒绝异常。
常见触发原因
- 测试执行时序错误:Travis默认执行maven/gradle构建任务时,测试环节在应用打包前执行,此时Spring Boot内嵌容器还未启动,无法响应8080端口的请求
- 测试注解配置错误:测试类未添加启动Spring Boot Web上下文的注解,运行测试时不会启动内嵌Tomcat服务
- 端口配置冲突:Travis构建环境的8080端口被其他服务占用,或者项目配置文件中指定的
server.port不是8080,服务启动后监听的端口和测试请求的端口不一致
修复方案
方案1:修正测试类配置(推荐)
使用Spring Boot测试的随机端口机制,避免固定端口冲突,同时保证测试运行前先启动Web容器:
// JUnit4版本注解 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class NoteAPITest { // 注入实际启动的随机端口 @LocalServerPort private int port; private String API_ROOT; // 容器启动后拼接正确的接口地址 @PostConstruct public void initApiRoot() { API_ROOT = "http://localhost:" + port + "/api/v1.0/notes"; } @Test public void whenGetAllNotes_thenOK() { final Response response = RestAssured.get(API_ROOT); assertEquals(HttpStatus.OK.value(), response.getStatusCode()); } // 其余测试方法保持不变 }
方案2:调整Travis构建流程
如果需要使用固定端口8080执行测试,修改.travis.yml配置,确保执行测试前先启动Spring Boot应用:
script: # 先启动Spring Boot应用,跳过测试 - mvn clean spring-boot:start -DskipTests # 执行测试用例 - mvn test # 测试完成后停止应用 - mvn spring-boot:stop
方案3:核对端口配置
检查项目application.properties/application.yml配置文件,确认没有修改server.port为非8080的值,也没有添加spring.main.web-application-type=NONE这类关闭Web容器的配置。
内容的提问来源于stack exchange,提问作者Ergün Kargün
相关产品推荐
相关产品推荐

