小编Sas*_*ota的帖子

JAX-RS 服务的集成测试

我最近实现了简单的 JAX-RS REST 端点。我想知道是否有任何透明的集成测试方式?

我在 stackowerflow 上搜索了一下,发现了这些问题:firstsecond。它们有点过时了,我希望已经有一些更好的测试方法。那里提出的解决方案并没有解决我的问题,因为它们提供了特定于供应商的方法或一些复杂的第三方方法。

问:测试 JAX-RS 服务的现代方法是什么?Java EE 是否为此提供了解决方案?或者一般来说,在 Java EE 生态系统中编写控制器测试的最佳方式是什么?

更具体地说,我正在寻找某种可以轻松测试 REST 调用的方法。在 spring 框架中,它通常是这样的:

@Autowired
MockMvc mvc;
@MockBean
MyService service;

@Test
public void shouldGetMyDto() {
    MyDto dto = new MyDto("test-id", "test-name");
    given(service.getMyDto("test-id")).willReturn(dto);

    mvc.perform(get("/api/my-entities/test-id"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(APPLICATION_JSON_UTF8_VALUE))
            .andExpect(jsonPath("$.id", is("test-id")))
            .andExpect(jsonPath("$.name", is("test-name")));

    verify(service).getMyDto("test-id");
}
Run Code Online (Sandbox Code Playgroud)

java rest junit jax-rs jakarta-ee

6
推荐指数
1
解决办法
4234
查看次数

TypeScript:使用枚举元素而不指定枚举名称

我有一个枚举,我想在几个地方使用它。让我们这样说枚举:

export enum MyEnum {
    MY_VALUE,
    MY_SECOND_VALUE
}
Run Code Online (Sandbox Code Playgroud)

每次使用它时,我都必须在值前指定枚举名称,例如:

MyEnum.MY_VALUE
Run Code Online (Sandbox Code Playgroud)

问:是否可以以不需要指定名称的方式导入枚举?

我想直接使用该值:

MY_VALUE
Run Code Online (Sandbox Code Playgroud)

在 Java 世界中,它被称为静态导入。但我还没有找到像 TypeScript 这样的东西。

我的 TypeScript 版本是 2.5.3。

javascript import enums typescript

6
推荐指数
1
解决办法
669
查看次数

IntelliJ Idea:自动删除不必要的“抛出”声明

通常在重构throws部分之后就变得不必要了。突出的IntelliJ他们灰色显示,它们可以被删除,但我想自动(就像未使用的进口得到通过去除删除ctrl+ alt+ O)。

问:有没有办法自动删除throws类中未使用的部分?有没有捷径可走?

java ide jetbrains-ide intellij-idea automated-refactoring

5
推荐指数
1
解决办法
3288
查看次数

从本地计算机连接到Docker中运行的Kafka

我在本地计算机上使用docker设置单节点基本Kafka部署,如Confluent Kafka文档中所述(步骤2-3).

另外,我还暴露了zookeeper的端口2181和kafka的端口9092,这样我就能从本地机器上运行的java客户端连接到它们:

$ docker run -d \
    -p 2181:2181 \
    --net=confluent \
    --name=zookeeper \
    -e ZOOKEEPER_CLIENT_PORT=2181 \
    confluentinc/cp-zookeeper:4.1.0

$ docker run -d \
    --net=confluent \
    --name=kafka \
    -p 9092:9092 \
    -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \
    -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
    confluentinc/cp-kafka:4.1.0
Run Code Online (Sandbox Code Playgroud)

问题:当我尝试从主机连接到kafka时,连接失败,因为它无法解析地址:kafka:9092.

这是我的Java代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("client.id", "KafkaExampleProducer");
props.put("key.serializer", LongSerializer.class.getName());
props.put("value.serializer", StringSerializer.class.getName());
KafkaProducer<Long, String> producer = new KafkaProducer<>(props);
ProducerRecord<Long, String> record = new ProducerRecord<>("foo", 1L, "Test 1");
producer.send(record).get();
producer.flush();
Run Code Online (Sandbox Code Playgroud)

例外:

java.io.IOException: Can't resolve …
Run Code Online (Sandbox Code Playgroud)

java apache-kafka docker confluent

5
推荐指数
2
解决办法
7698
查看次数

通过 ViewPager 滑动屏幕时 ExoPlayer 显示错误的预览图像

我有一个PlayerView以纵向占据片段的上半部分,下半部分显示一些文本。该片段是 a 的一部分ViewPager,用户可以切换不同视频的屏幕。

问题:在屏幕之间导航(向右/向左滑动)时,PlayerView有时会显示上一个屏幕的预览图像。它只显示了几分之一秒,然后显示了正确的预览图片,但它很明显。

问:如何让PlayerView只显示正确的预览图片?它不应该与上一张图片一起闪烁。可能是我误用了某些东西(播放器或视图的错误实例化......)?如果这是一个已知问题(滑动时模糊视频等),可能有一些解决方法?任何建议/想法表示赞赏。

我的布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@id/video_view"
        android:scrollbars="vertical" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在片段代码中我有:

@Override
public void onStart() {
    ...
    SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(
            getActivity(), new DefaultTrackSelector()
    );
    player.prepare(mediaSource);
    playerView.setPlayer(player);
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑1。

根据评论部分的要求,我的文件PageAdapter非常标准(就像 Android Studio 在创建选项卡式活动时生成的文件一样),具有唯一的扩展名 - 我将当前片段保存在其中,就像此处建议的那样

android android-viewpager exoplayer exoplayer2.x

5
推荐指数
0
解决办法
1164
查看次数

Spring Boot:重写 CacheManager bean 使缓存相关属性不起作用

我有一个带有 Redis 缓存的 Spring Boot 2 应用程序。它工作得很好,直到我覆盖了CacheManagerbean。

问题:以下配置属性被忽略(我无法再关闭缓存):

spring.cache.type=none
Run Code Online (Sandbox Code Playgroud)

尽管根据文档它应该可以工作。

问:作品如何制作spring.cache.type=none

有一个像这样的解决方法,但它远不是一个好的解决方案。

更多详细信息:这是我的配置:

@Configuration
public class CacheConfiguration {
    @Bean
    RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory) {
        return RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
    }

    @Bean
    CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {
        Map<String, RedisCacheConfiguration> ttlConfiguration = ...
        RedisCacheConfiguration defaultTtlConfiguration = ...
        return new RedisCacheManager(
                redisCacheWriter, defaultTtlConfiguration, ttlConfiguration
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

java spring redis spring-boot spring-cache

5
推荐指数
1
解决办法
3855
查看次数

Spring Data:如何在一个事务中锁定一行并使其他事务等到它被释放?

我有一种@Transactional方法可以使用findById()Spring Data 存储库请求记录。

现在我想以一种方式锁定这个对象,@Transactional如果并行执行的其他方法将等到锁定被释放。

我尝试过的:我浏览了@LockLockModeType的文档,但我仍然无法弄清楚它是否涵盖了我的情况。

另一种选择是select for update在数据库级别,但我不确定它是最佳选择。

Q:如何在spring数据事务中锁定一个Entity对象(db row)并使其他事务等待?

java spring spring-transactions spring-data-jpa

5
推荐指数
1
解决办法
3411
查看次数

Spring Boot gRPC:发生业务错误时如何返回错误代码?

我正在使用LogNet grpc-spring-boot-starter实现 gRPC API 。

例如,INVALID_ARGUMENT当传递了不正确的参数时,我想返回错误代码。

如果我抛出一个自定义异常,它会以io.grpc.StatusRuntimeException: UNKNOWN.

问:是否可以定义一些异常处理机制,以便特定类型的异常始终导致正确的 gRPC 状态?

不幸的是,项目中没有那么多文档。

java spring spring-boot grpc grpc-java

5
推荐指数
1
解决办法
2164
查看次数

Jenkins声明式管道:如何重命名“声明式:发布操作”步骤?

我有一个声明性管道,如下所示:

pipeline {
    stages {...}
    post {
        success {...}
        failure {...}
    }
}
Run Code Online (Sandbox Code Playgroud)

它导致创建称为“声明性:发布操作”的最后一步。

问:如何重命名“声明式:发布操作”步骤?

我想要一个有意义的名称,例如“发送电子邮件通知”。

管道

更新:

名称在此类中进行了硬编码。使用当前版本的API(3.44),无法重命名它们。

jenkins jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
151
查看次数

如何为 child_process spawn() 调用的输出的每一行添加文本前缀?

我使用spawn()from执行多个进程child_process

const { spawn } = require('child_process');

spawn("sh", ["script1.sh"], { shell: false, stdio: "inherit"});
spawn("sh", ["script2.sh"], { shell: false, stdio: "inherit"});
spawn("sh", ["script3.sh"], { shell: false, stdio: "inherit"});
Run Code Online (Sandbox Code Playgroud)

问题:如何为脚本的输出添加文本前缀?

这个想法是我将能够轻松区分每个脚本记录的内容。

我浏览了spawn文档,但找不到任何有助于实现这一目标的内容。

注意:我无法修改脚本。

javascript stdout process child-process node.js

5
推荐指数
1
解决办法
275
查看次数