@SpringBootApplication
@ConfigurationPropertiesScan
class DemoApplication {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val webClient = WebClient.builder().build()
val data = webClient.get()
.uri("http://localhost:8080/home")
.retrieve()
.bodyToMono(Response::class.java)
.block()?.data
SpringApplicationBuilder(DemoApplication::class.java).run(*args)
}
}
}
data class Response(val data: String)
14:10:16.944[reactor-http-nio-1]调试org.springframework.http.codec.json.jackson2jsondecoder-[4EF27D66]解码[响应(data=hello)]
14:10:16.944[reactor-http-nio-1]调试reactor.netty.resources.pooledconnectionprovider-[ID:0x9a13da08,L:/127.0.0.1:62737-R:localhost/127.0.0.1:8080]onStateChange(GET{uri=/home,62737-R:localhost/127.0.0.1:8080]}},[response_completed])
我已经尝试通过在应用程序yaml中将它们的日志级别更改为info来禁用这些日志,如下所示,但这并不起作用,因为这种情况甚至发生在应用程序启动之前。
logging:
level:
org:
springframework:
web: info
http:
codec:
json: info
是否有人有其他方法来禁用这些应用程序启动或webClient编解码器日志?
向web客户端添加自定义编解码器对我来说很有效。在这个自定义编解码器中,我正在反序列化响应。
这是自定义编解码器
class MyMessageReader: HttpMessageReader<Response> {
override fun getReadableMediaTypes(): MutableList<MediaType> {
return mutableListOf()
}
override fun canRead(elementType: ResolvableType, mediaType: MediaType?): Boolean {
return true
}
override fun read(elementType: ResolvableType, message: ReactiveHttpInputMessage, hints: MutableMap<String, Any>): Flux<Response> {
return Flux.just(Jackson2JsonDecoder().objectMapper.readValue(message.toString(), Response::class.java))
}
override fun readMono(elementType: ResolvableType, message: ReactiveHttpInputMessage, hints: MutableMap<String, Any>): Mono<Response> {
return message.body.map {
val count = it.readableByteCount()
val str = ByteArray(count)
var count1 = 0
while (count1 < count) {
str[count1] = it.read()
count1++
}
Jackson2JsonDecoder().objectMapper.readValue(str, Response::class.java)
}.toMono()
}
}
将编解码器注册到web客户端:
WebClient.builder().codecs {
it.customCodecs().register(MyMessageReader())
}.build()
@SpringBootApplication
@ConfigurationPropertiesScan
class DemoApplication {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val webClient = WebClient.builder().codecs {
it.customCodecs().register(MyMessageReader())
}.build()
val data = webClient.get()
.uri("http://localhost:8080/home")
.retrieve()
.bodyToMono(Response::class.java)
.block()
SpringApplicationBuilder(DemoApplication::class.java).run(*args)
}
}
}
我有一个Spring Boot 1.4.2应用程序。启动期间使用的一些代码如下所示: 有一个组件决定系统类型。此组件在从其他组件启动期间使用。在生产中,一切正常。 现在,我想使用Spring1.4的MockBean添加一些集成测试。 测试如下所示: 基本上,模拟效果很好。使用我的systemTypeDetectorMock,如果我调用getSystemType- 问题是应用程序没有启动。目前Spr
下面是上面文件引用的: 但当以的身份运行InteliJ时,问题就会消失。
问题内容: 据我所知,您只能使用VisualVM来分析正在运行的应用程序。 有谁知道使用VisualVM剖析Java应用程序启动和启动的方法吗? 我相信必须有一种方法,否则将是一个重大的疏忽。 希望我只是误读了文档。 谢谢,第 问题答案: 您是否要使用`-Xrunjdwp“命令行选项来设置性能分析?如果是,则该选项仅出于此目的具有” suspend“参数 : 如果要在加载主类之前立即挂起目标VM,
“Spring-Boot-AutoConfigure”,版本:'2.4.1'
我正在尝试在web应用程序中使用Freemarker进行电子邮件模板制作。 我声明了一个FreeMarkerConfiguration FactoryBean,如下所示: 运行我的JUnit时一切正常,但在我的webapp中运行时,我的bean被Spring启动FreeMarkerAutoConfiguration“覆盖”。 我已尝试: 从我的gradle文件中删除sping-boot-start
我仍然对vertx假设你将部署/启动你的应用程序的方式有些误解。仍然有两个问题,但它们对我来说几乎没有关系。 问题1:我有办法让您的应用程序可以从命令行和IDEA两种方式启动吗? 一方面,有一个类(由 Vert.x 提供)可以从命令行启动我们的应用程序。它为您提供了方法。但是,如果我从shell启动它,我将无法调试它,对吧? 另一方面,要在IDEA中选择你的应用程序,你需要手动创建main方法。此