小编Abh*_*kar的帖子

什么是Spring Boot中的WebMvcConfigurationSupport替换?

在传统的Spring MVC中,我可以扩展WebMvcConfigurationSupport并执行以下操作:

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.favorPathExtension(false).
    favorParameter(true).
    defaultContentType(MediaType.APPLICATION_JSON).
    mediaType("xml", MediaType.APPLICATION_XML);
}
Run Code Online (Sandbox Code Playgroud)

我如何在Spring Boot应用程序中执行此操作?我的理解是,增加了WebMvcConfigurationSupport与@EnableWebMvc将禁用春季启动WebMvc自动配置,这是我不想要的.

spring-mvc content-negotiation spring-boot

4
推荐指数
1
解决办法
6071
查看次数

如何使用Feign客户端设置请求标头?

我们正在使用Spring Cloud框架开发一套微服务,我们需要做的一件事就是设置请求头.我知道我可以将参数@RequestHeader传递给Feign方法,但该值需要来自另一个bean.我不知道SPEL是否可用于Feign参数值.我认为这对于大多数客户来说是一个很常见的用例,所以会有一些例子,但到目前为止我还没有找到任何例子.当然,我可以深入了解Spring课程代码并尝试覆盖默认的Feign配置,但如果我要编写大量代码来实现这一点,它有点会破坏声明性客户端的目的.有什么想法吗?

spring-mvc microservices spring-cloud netflix-feign spring-cloud-netflix

4
推荐指数
1
解决办法
1万
查看次数

如何微调Spring Cloud Feign客户端?

Spring Cloud 文档说:

如果Hystrix在类路径上,默认情况下,Feign将使用断路器包装所有方法.

  1. 这很好,但如何配置Hystrix选项以忽略某些异常?我有一个ErrorDecoder将HTTP状态代码映射到异常的实现.如果我戴上@HystrixCommand这个方法,Feign会尊重吗?
  2. 我们的要求是记录有关依赖项的每个HTTP调用的各种详细信息.目前,我有一个装饰RestTemplate,这样做.从我在代码中看到的并基于Dave Syer 在这里的答案,Feign没有使用RestTemplate.那么我该如何满足日志记录要求呢?界面feign.Client看起来很有希望,虽然我不完全确定是否使用它.

spring-cloud netflix-feign spring-cloud-feign feign spring-cloud-netflix

4
推荐指数
1
解决办法
4298
查看次数

何时抛出IllegalStateException vs IllegalArgumentException?

让我们从Javadocs开始:

IllegalStateException异常

表示在非法或不适当的时间调用了方法.换句话说,Java环境或Java应用程序未处于所请求操作的适当状态.

抛出:IllegalArgumentException

抛出以指示方法已被传递非法或不适当的参数.

上述问题是它们非常黑白.考虑一种方法,其中方法正在解析调用者提供的文件.该文件存在,可读,格式正确.但是,文件中的某些内容不符合业务规则.在这种情况下抛出什么是适当的例外 - IllegalStateException或者IllegalArgumentException?

查看提供断言的各种库,例如Guava Preconditions或Spring Assert,似乎没有达成共识.这里和这里有一些很好的讨论,但没有一个能为我上面提到的常见用例提供确凿的答案.

免责声明:据我所知,我没有展示一些代码,但我认为这是一个特殊而实用的问题,需要考虑进行良好的API设计.让我们假装我们回到了堆栈溢出的好日子,当时人们乐于讨论实用问题,而不是贬低任何看起来不像家庭作业的东西.

java exception illegalargumentexception illegalstateexception

4
推荐指数
3
解决办法
5180
查看次数

PEP 622 - match 语句可以用作表达式吗?

PEP 622引入了match声明作为if-elif-else. 然而,我在提案或任何在线材料中找不到的一件事是该match声明是否可以用作表达式而不仅仅是作为声明。

举几个例子可以清楚地说明这一点:

示例1:

def make_point_2d(pt):
    match pt:
        case (x, y):
            return Point2d(x, y)
        case _:
            raise TypeError("not a point we support")
Run Code Online (Sandbox Code Playgroud)

示例2:

match response.status:
    case 200:
        do_something(response.data)
    case 301 | 302:
        retry(response.location)
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,函数从子句内部返回case,而在第二个示例中,不返回任何内容。但我希望能够做类似以下假设示例的事情:

spouse = match name:
    case "John":
        "Jane"
    case "David":
        "Alice"
print(spouse)
Run Code Online (Sandbox Code Playgroud)

但它无法编译。

python isinstance python-3.10 structural-pattern-matching

4
推荐指数
1
解决办法
386
查看次数

Scala:如何找出StringOps.map使用哪个CanBuildFrom实现

我正在通过"Scala for the Impatient"一书中的练习来学习Scala.一个问题是:

结果"abc".map(_.toUpper)是a String,但结果 "abc".map(_.toInt)是a Vector.找出为什么.

在阅读" Scala集合的架构 "之后,我认为这是因为CanBuildFrom选择了不同的隐式实现.如何找出为上述表达式选择的?

string scala mapreduce builder implicit-conversion

3
推荐指数
1
解决办法
132
查看次数

Spring Cloud服务查找错误:负载均衡器没有可用于客户端的服务器

我一直在玩一个Spring Cloud应用程序,它包含一个配置服务器,一个发现服务器(Eureka)和一个带有Ribbon的Feign客户端(由Feign内部使用).我有2个服务,a movie-service和a daily-update-service.目的是在一个地方提供热门电影,新闻和天气的每日更新.我遇到的问题是movie-serviceFeign客户端无法找到它daily-update-service.它出错了以下内容:

Caused by: java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: movie-service
daily_update_service_1 |    at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:59) ~[spring-cloud-netflix-core-1.1.0.M4.jar:1.1.0.M4]
daily_update_service_1 |    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:95) ~[feign-core-8.12.1.jar:8.12.1]
daily_update_service_1 |    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74) ~[feign-core-8.12.1.jar:8.12.1]
daily_update_service_1 |    at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:54) ~[feign-hystrix-8.12.1.jar:8.12.1]
daily_update_service_1 |    at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:294) ~[hystrix-core-1.4.21.jar:1.4.21]
daily_update_service_1 |    ... 21 common frames omitted
daily_update_service_1 | Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: movie-service
daily_update_service_1 |    at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:468) ~[ribbon-loadbalancer-2.1.0.jar:2.1.0]
daily_update_service_1 |    at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) …
Run Code Online (Sandbox Code Playgroud)

docker spring-boot spring-cloud netflix-eureka

3
推荐指数
1
解决办法
1万
查看次数

SBT:如何 Dockerize 一个胖罐子?

我正在用一个胖罐子构建一个 Docker 镜像。我使用sbt-assembly插件来构建 jar,并使用sbt-native-packager来构建 Docker 映像。我对 SBT 不是很熟悉,并且遇到了以下问题。

  1. 我想assembly从docker:publish任务中声明对任务的依赖,以便在将胖罐添加到图像之前创建它。我按照文档中的说明做了,但它不起作用。assembly在我调用它之前不会运行。

    publish := (publish dependsOn assembly).value

  2. 构建映像的步骤之一是复制胖罐。由于程序集插件在 中创建 jar target/scala_whatever/projectname-assembly-X.X.X.jar,我需要知道确切scala_whatever的 jar 名称。程序集似乎有一个密钥,assemblyJarName但我不知道如何访问它。我尝试了以下失败的方法。

    Cmd("COPY", "target/scala*/*.jar /app.jar")

帮助!

sbt sbt-assembly sbt-native-packager

3
推荐指数
1
解决办法
1498
查看次数

Java Spring:如何高效地从CSV文件中读取和保存大量数据?

我正在 Java Spring 中开发一个 Web 应用程序,我希望用户能够从前端上传 CSV 文件,然后查看导入过程的实时进度,导入后他应该能够搜索单个条目从导入的数据。

导入过程包括实际上传文件(通过 REST API POST 请求发送),然后读取文件并将其内容保存到数据库中,以便用户能够从此数据中进行搜索。

将数据保存到数据库的最快方法是什么?仅循环遍历各行并创建一个新的类对象并通过 JPARepository 为每行保存它会花费太多时间。10000 行大约需要 90 秒。我需要让它变得更快。我需要在合理的时间内添加 200k 行。

附注:

我看到了使用 Reactor 的异步方法。这应该会更快,因为它使用多个线程,并且保存行的顺序基本上并不重要(尽管数据在 CSV 中具有 ID)。

然后我还看到了 Spring Batch 作业,但所有示例都使用 SQL。我正在使用存储库,所以我不确定是否可以使用它或者它是否是最好的方法。

java spring spring-mvc spring-data-jpa spring-boot

3
推荐指数
1
解决办法
2万
查看次数

如何以人类可读的方式记录嵌套对象中的 Protobuf 字符串?

给定一个原型文件:

\n
syntax = "proto3";\npackage hello;\n\nmessage TopGreeting {\n    NestedGreeting greeting = 1;\n}\n\nmessage NestedGreeting {\n    Greeting greeting = 1;\n}\n\nmessage Greeting {\n    string message = 1;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

和代码:

\n
public class Main {\n    public static void main(String[] args) {\n        System.out.printf("From top: %s%n", newGreeting("\xec\x98\xa4\xeb\x8a\x98\xec\x9d\x80 \xeb\xac\xb4\xec\x8a\xa8 \xec\x9a\x94\xec\x9d\xbc\xec\x9e\x85\xeb\x8b\x88\xea\xb9\x8c?"));\n        System.out.printf("Directly: %s%n", "\xec\x98\xa4\xeb\x8a\x98\xec\x9d\x80 \xeb\xac\xb4\xec\x8a\xa8 \xec\x9a\x94\xec\x9d\xbc\xec\x9e\x85\xeb\x8b\x88\xea\xb9\x8c?");\n        System.out.printf("ByteString: %s", newGreeting("\xec\x98\xa4\xeb\x8a\x98\xec\x9d\x80 \xeb\xac\xb4\xec\x8a\xa8 \xec\x9a\x94\xec\x9d\xbc\xec\x9e\x85\xeb\x8b\x88\xea\xb9\x8c?").toByteString().toStringUtf8());\n    }\n\n    private static Hello.TopGreeting newGreeting(String message) {\n        Hello.Greeting greeting = Hello.Greeting.newBuilder()\n                .setMessage(message)\n                .build();\n        Hello.NestedGreeting nestedGreeting = Hello.NestedGreeting.newBuilder()\n                .setGreeting(greeting)\n                .build();\n        return Hello.TopGreeting.newBuilder()\n                .setGreeting(nestedGreeting)\n                .build();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n …

serialization protocol-buffers protobuf-java

3
推荐指数
1
解决办法
1741
查看次数