小编Bas*_*igt的帖子

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

在发生异常后,如何使用PostgreSQL在Spring Boot中继续执行事务?

我创建了一个创建用户帐户的服务方法.如果由于给定的电子邮件地址已经在我们的数据库中而导致创建失败,我想向用户发送一封电子邮件,说明他们已经注册:

@Transactional(noRollbackFor=DuplicateEmailException.class)
void registerUser(User user) {
   try {
      userRepository.create(user);
   catch(DuplicateEmailException e) {
      User registeredUser = userRepository.findByEmail(user.getEmail());
      mailService.sendAlreadyRegisteredEmail(registeredUser);
   }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.虽然我标记DuplicateEmailExcepetion为"无回滚",但第二个SQL查询(findByEmail)仍然失败,因为事务已中止.

我究竟做错了什么?

@Transactional存储库中没有注释.

java sql postgresql jdbctemplate spring-boot

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

MySQL全文后缀搜索(布尔模式) - (*apple)

在布尔模式下apple*会找到apple, apples, applestore.但它找不到我(虚拟的话)Mapple, Trapple.所以我尝试使用,*apple但这不起作用.

是不是可以通过全文搜索找到以苹果结尾的单词?或者我错过了文档中的内容?

mysql

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

在 JUnit 测试中,如何断言两个数字相等而不考虑它们的类型?

我想做的一个例子:

double delta = 0.000001d;
Number myNumber = resultOfSomeTestExecution();
Assert.assertEquals(5, myNumber, delta);
Run Code Online (Sandbox Code Playgroud)

我想断言结果是 5,或者在合理的增量间隔内至少接近 5,但我不在乎它是 Integer、Long、Double、BigDecimal 还是其他类型。有没有可以做到这一点的断言库?

java junit

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

如何为所有测试仅一次初始化Spring applicationContext

我有一组基于Spring的测试。

为了快速执行测试,我想确保Spring上下文仅初始化一次,然后所有测试都应针对该上下文运行,然后将其关闭。

我已经尝试了以下方法:

  1. 使用@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文
  2. @RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners({MyTestExecutionListener.class})与手写测试执行侦听器一起使用,该侦听器将初始化spring上下文并将其注入到具体的测试类中
  3. @BeforeClass在基类和静态字段中使用侦听器来存储spring上下文,以及@AfterClass用于关闭的

使用这三种方法,spring上下文似乎不止一次被初始化,这需要很多时间。看起来JUnit在运行测试时会卸载类,因此有时会丢失静态字段的内容。

有没有办法确保spring上下文仅初始化一次?

java spring spring-test junit4

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