Files
SHiNE-server/SHiNE-server/src/main/java/server/sync/SolanaUsersSyncStartupService.java
T

94 lines
2.4 KiB
Java

package server.sync;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sync.service.SolanaUsersSyncService;
import utils.config.AppConfig;
public final class SolanaUsersSyncStartupService {
private static final Logger log =
LoggerFactory.getLogger(
SolanaUsersSyncStartupService.class
);
private static volatile SolanaUsersSyncService service;
private SolanaUsersSyncStartupService() {
}
public static synchronized void startOrThrow()
throws Exception {
if (service != null) {
return;
}
AppConfig serverConfig =
AppConfig.getInstance();
if (!sync.config.AppConfig.isEnabled(serverConfig)) {
log.info(
"Solana users sync is disabled. Param {} is false or absent.",
sync.config.AppConfig.ENABLED_KEY
);
return;
}
sync.config.AppConfig syncConfig =
sync.config.AppConfig.fromServerConfig(
serverConfig
);
service =
new SolanaUsersSyncService(
syncConfig
);
Runtime.getRuntime()
.addShutdownHook(
new Thread(
SolanaUsersSyncStartupService::closeQuietly,
"solana-users-sync-shutdown"
)
);
log.info(
"Starting Solana users sync before remaining server startup..."
);
service.start();
try {
service.awaitReady();
} catch (Exception exception) {
log.warn(
"Solana users sync is not ready yet; continuing server startup and leaving sync service running",
exception
);
return;
}
log.info(
"Solana users sync is READY. Server startup may continue."
);
}
public static synchronized void closeQuietly() {
if (service == null) {
return;
}
try {
service.close();
} catch (Exception exception) {
log.warn(
"Failed to close Solana users sync service cleanly",
exception
);
} finally {
service = null;
}
}
}