I write a SmartLifecycle to start a grpc server:
public class GrpcServerLifecycle implements SmartLifecycle {
private static final Logger logger = LoggerFactory.getLogger(GrpcServerLifecycle.class);
@Resource
private GrpcServerManager grpcServerManager;
private volatile boolean runState = false;
@Override
public synchronized void start() {
logger.info("Start all gRPC server");
grpcServerManager.startAll();
runState = true;
}
@Override
public synchronized void stop() {
logger.info("Stop all gRPC server");
grpcServerManager.stopAll();
runState = false;
}
@Override
public boolean isRunning() {
return runState;
}
}
The startAll method use a thread to await termination (run as blocking until interuppted):
new Thread(() -> {
try {
server.awaitTermination();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
server.shutdown();
}
}).start();
When my spring application starts, the grpc server starts.
But, when I write some tests, and use maven clean install, it failed!
The first test was succeed, but second was failed, and third, forth, rest...
The cause is very clear: address binded. That means, maven test start more than one grpc server,
stop method of GrpcServerLifecycle was never called.
Why and how to solve this? I use AbstractTestNGSpringContextTests
Aucun commentaire:
Enregistrer un commentaire