小编use*_*213的帖子

无需重新加载上下文即可编辑并重新运行 spring boot 单元测试以加快测试速度

我有一个 Spring Boot 应用程序,并使用 postgres 测试容器 ( https://www.testcontainers.org/ ) 和 JUnit编写了单元测试。测试具有 @SpringBootTest 注释,它在运行测试之前加载上下文并启动测试容器。

在我相对较旧的 Macbook 上加载上下文并启动容器大约需要 15 秒,但测试本身非常快(每个 < 100 毫秒)。因此,在包含 100 次测试的完整构建中,这并不重要。这是 15 秒的一次性成本。但是在 IDE 中单独开发/调试测试变得非常缓慢。每一次测试都会产生 15 秒的启动成本。

我知道 IntelliJ 和 Springboot 支持在应用程序运行时热重载类。对于单元测试是否有类似的解决方案/建议?即保持上下文加载和 testcontainer(DB) 运行,但只重新编译修改后的测试类并再次运行选定的测试。

java junit unit-testing spring-boot

12
推荐指数
2
解决办法
727
查看次数

Vim autocmd(保存文件,运行代码格式化程序,重新加载文件)

我希望将源代码格式化程序Uncrustify与Vim 集成.以下两个选项中的任何一个都足够了.

  1. 格式化我当前正在编辑的代码(即gq按下时).
  2. 保存文件时格式化代码,然后将格式化文件重新加载到当前Vim窗口.

选项1是优选的.我试过了

set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup
Run Code Online (Sandbox Code Playgroud)

即我用命令行选项调用Uncrustify.这不起作用.Vi给出了E518: Unknown option: ~/misc/uncrustify.cfg错误.

对于选项2,我在vimrc文件中尝试了以下内容

autocmd bufwritepost *.cpp ! ~/bin/uncrustify -c ~/misc/uncrustify.cfg --no-backup <afile>
Run Code Online (Sandbox Code Playgroud)

保存后文件格式化,但我必须手动将文件重新加载到Vim中.

vim uncrustify

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

Springboot JPA 存储库未释放 Hikari DB 连接

我在 Springboot 中有一个使用 Hikari 进行连接池的 REST API。Hikari 使用默认配置(池中 10 个连接,等待连接超时 30 秒)。API本身非常简单

  1. 它首先进行 JPA 存储库查询以从 PostgresDB 获取一些数据。这部分大约需要15-20毫秒。
  2. 然后,它将这些数据发送到远程 REST API,该 API 的速度很慢,可能需要长达 120 秒的时间。
  3. 一旦远程 API 响应,我的 API 将结果返回给客户端。简化版本如下所示。
    public ResponseEntity analyseData(int companyId) {
        Company company = companyRepository.findById(companyId);//takes 20ms
        Analysis analysis = callRemoteRestAPI(company.data) //takes 120seconds
       return ResponseEntity.status(200).body(analysis);

    }
Run Code Online (Sandbox Code Playgroud)

该代码没有任何@Transactional 注释。我发现 JDBC 连接在我的 API 的整个持续时间内(即约 120 秒)一直保持。因此,如果我们收到超过 10 个请求,它们就会在 hikari 连接池上等待超时(30 秒)。但严格来说,JPA 查询完成后(上面的步骤 1),我的 API 不需要连接。

有没有办法让 spring 在查询后立即释放此连接,而不是保留它直到整个 API 完成处理?Spring 可以配置为为每个 JPA 请求获取连接吗?这样,如果我有多个 JPA 查询,其中散布着非常慢的操作,服务器吞吐量不会受到影响,并且它可以处理超过 10 个并发 API 请求。。

java spring-boot connection-pool

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