不久前,有人在我们的 BitBucket Cloud 存储库中意外创建了一个名为“bugfix”的分支,并将其合并到开发和主分支中。这意味着如果我们尝试推送以 bugfix 开头的任何分支,例如“bugfix/ABC-234_somefix”,就会出现引用错误
我们不知道它是如何合并的(例如,它是合并,还是压缩,还是重新定基或类似的)。
我们可以认为删除这个旧分支是安全的吗?
不久前,有人在我们的 BitBucket Cloud 存储库中意外创建了一个名为“bugfix”的分支,并将其合并到开发和主分支中。这意味着如果我们尝试推送以 bugfix 开头的任何分支,例如“bugfix/ABC-234_somefix”,就会出现引用错误
我们不知道它是如何合并的(例如,它是合并,还是压缩,还是重新定基或类似的)。
我们可以认为删除这个旧分支是安全的吗?
如果我们搜索我们的spring boot 2.0.3项目源代码(所有文件),没有提到nio。
根据spring 文档,nio 默认是禁用的,所以我们预计不会使用 nio。
但是,当应用程序启动时,它会显示“restartedMain org.apache.coyote.http11.Http11NioProtocol [] => Initializing ProtocolHandler ["http-nio-8080"]”
这是否意味着我们正在使用 nio?如果是这样,那么文档中关于默认不使用它的说法是错误的吗?
2024-10-23T09:10:56,001Z INFO restartedMain o.s.b.web.embedded.tomcat.TomcatWebServer [] => Tomcat initialized with port(s): 8080 (http)
2024-10-23T09:10:56,031Z INFO restartedMain org.apache.coyote.http11.Http11NioProtocol [] => Initializing ProtocolHandler ["http-nio-8080"]
2024-10-23T09:10:56,052Z INFO restartedMain org.apache.catalina.core.StandardService [] => Starting service [Tomcat]
2024-10-23T09:10:56,052Z INFO restartedMain org.apache.catalina.core.StandardEngine [] => Starting Servlet Engine: Apache Tomcat/8.5.31
我们将 spring boot open feign 与我们的 java 8 spring boot 2.0.3 应用程序结合使用。Open feign 用于对其他服务进行 REST 调用。我们正尝试让 New Relic java 代理将 feign 调用“视为”跟踪的一部分,但它根本没有对它们进行检测。
我们被告知 New Relic 仅支持以下 http 客户端,我们只能猜测 Feign 没有使用其中之一:
Akka HTTP 2.4.5 to latest
Akka Http Core from 0.4 to latest
AsyncHttpClient 2.0.0-RC1 to latest
HttpAsyncClient 4.1 to latest
Apache Httpclient from 3.1 to 5.x
java.net.HttpURLConnection
OkHttp 3.6.0 to latest
Ning AsyncHttpClient 1.x
Spring webclient from 5.0.0.release to latest
STTP v2
以下是我们包含 feign 的方式:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
有几个人遇到了类似的问题,但标记为他们的解决方案并没有解决我的问题。
Pom.xml:
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<scope>test</scope>
</dependency>
:
CustomerControllerTest2.java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.springframework.http.HttpHeaders.ACCEPT;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
public class CustomerControllerTest2 {
@Autowired
private WebTestClient webTestClient;
@Test
void shouldReturnManyCustomers(){
this.webTestClient
.get()
.uri("/customers")
.header(ACCEPT,APPLICATION_JSON_VALUE)
.exchange()
.expectStatus()
.is2xxSuccessful()
.expectHeader()
.contentType(APPLICATION_JSON)
.expectBody()
.jsonPath("$.length()").isNumber()
.jsonPath("$[0].id").isEqualTo(1);
}
}
根据其他人的说法,解决方案是添加“@AutoConfigureWebTestClient”和“@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)”
但这并没有帮助。
当我使用 TestRestTemplate 时,我没有任何问题,例如下面的代码可以开箱即用:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class CustomerControllerTest {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Test
void greetingShouldReturnDefaultMessage() throws Exception {
assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/customers",
String.class)).contains("[email protected]");
}
}
这些文档:
说以下内容会起作用:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class MyRandomPortWebTestClientTests {
@Test
void exampleTest(@Autowired WebTestClient webClient) {
webClient
.get().uri("/")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World");
}
}
但这也给出了相同的“没有可用的'org.springframework.test.web.reactive.server.WebTestClient'类型的合格bean:预计至少有1个符合自动装配候选资格的bean。”
有趣的是,如果我运行“mvn test”,TestRestTemplate 和 TesWebClient 测试都可以工作。如果我使用 intellij 运行测试,它会失败。在intellij中,默认情况下它似乎不知道如何运行任何东西,但是junit下有一个“All in package”运行配置,这是我可以看到运行测试的唯一方法,并且这运行所有TestRestTemplate测试没有问题,但所有 WebTestClient 基础测试都会因无合格 bean 问题而失败。