我有一个 Spring 应用程序,我正在尝试使用 EmbededRedis 进行测试。所以我创建了一个像下面这样的组件来初始化并在测试后杀死redis。
@Component
public class EmbededRedis {
@Value("${spring.redis.port}")
private int redisPort;
private RedisServer redisServer;
@PostConstruct
public void startRedis() throws IOException {
redisServer = new RedisServer(redisPort);
redisServer.start();
}
@PreDestroy
public void stopRedis() {
redisServer.stop();
}
}
但现在我面临一个奇怪的问题。因为 spring 缓存了上下文,所以 PreDestroy 不会在我的测试执行后每次都被调用,但是由于某种原因,@PostConstruct 会被调用,并且 EmbededRedis 会一次又一次地尝试启动正在运行的 redis 服务器,这在执行过程中会产生问题。
有没有办法以任何方式处理这种情况?
更新 这就是我主要定义我的测试的方式。
@SpringBootTest(classes = {SpringApplication.class})
@ActiveProfiles("test")
public class RedisApplicationTest {