[Java] Abrufen von Daten aus der Datenbank mithilfe des Singleton-Dienstes in Spring (Boot)

Abrufen von Daten aus der Datenbank mithilfe des Singleton-Dienstes in Spring (Boot)

・ DI zu enum ・ Speicherplatz sparen ・ Unterstützt hohe Last mit Cache-Funktion · Schreibgeschützt ・ Ich benutze es für Ranking etc. ・ Unterstützt sowohl Spring Framework als auch Spring Boot ・ Für Mapper lesen Sie bitte und stellen Sie sie entsprechend ein. -Initialisieren beim Aktualisieren des Kontexts

Umgebung

・ Spring Framework 4.2.9 ・ Spring Boot 2.2.1 · Java 1.8 ・ Windows 10 64bit

SampleRankingSingletonService · Singleton-Dienst (enum), der Daten erfasst und speichert ・ Ich möchte DI Mapper mit @Autowired erstellen, kann dies jedoch nicht. Erstellen Sie daher einen separaten Initialisierungsdienst. ・ Ich denke, es ist besser, ein Programm hinzuzufügen, um die Daten zu verarbeiten. (Die Ausgabe von SQL ist eine schwere Last)

public enum SampleRankingSingletonService {

	INSTANCE;

	//Zeitüberschreitungswerteinstellung lesen
	public static final int TIMEOUT_SEC = 1800;

	private static final Object lock = new Object();

	private LocalDateTime queryDate;

	//Neuestes Ranking
	private List<Sample> latestRanking = new CopyOnWriteArrayList<>();

	private SampleMapper sampleMapper;

	private SampleRankingSingletonService () {
	}

	public static SampleRankingSingletonService getInstance() {
		return INSTANCE;
	}

	private boolean isTimeout() {
		LocalDateTime execDate = LocalDateTime.now();
		if (queryDate == null) { return true; }

		LocalDateTime expireDate = queryDate.plusSeconds(TIMEOUT_SEC);
		if (expireDate.isBefore(execDate)) {
			return true;
		}
		return false;
	}

	public synchronized void reload() {
		queryDate = LocalDateTime.now();
		latestRanking = sampleMapper.selectLatestRanking(); // <-Ranking-Erfassung SQL-Ausgabe
	}

	//Rufen Sie an, bevor Sie die Datenverarbeitung durchführen
	public void initQuery() {
		synchronized(lock) {
			if (isTimeout() || latestRanking.size() <= 0) {
				reload();
			}
		}
	}

	public Integer countLatestRanking() {
		return latestRanking.size();
	}
}

SampleRankingSingletonInitializerService ・ Wird automatisch von DI generiert

@Component
public class SampleRankingSingletonInitializerService {

	@Autowired
	private SampleMapper sampleMapper;

	//Legen Sie den DI-Mapper im Singleton-Dienst fest, wenn Sie Beans generieren
	@PostConstruct
	public void init() {
		SampleRankingSingletonService.INSTANCE.setSampleMapper(sampleMapper);
	}

	//Führen Sie die erste Abfrage aus, wenn Sie den Kontext aktualisieren(Spring Boot gibt beim Ausführen mit PostConstruct einen Fehler aus)       
	@EventListener
	public void onContextRefreshedEvent(ContextRefreshedEvent evt) {
		SampleRankingSingletonService.INSTANCE.initQuery();
	}

	public SampleMapper getSampleMapper() {
		return sampleMapper;
	}

	public void setSampleMapper(SampleMapper sampleMapper) {
		this.sampleMapper = sampleMapper;
	}
}

XML-Datei für DI

    <bean id="sample.sampleRankingSingletonInitializerService" class="org.sample.SampleRankingSingletonInitializerService">
        <property name="sampleMapper" ref="sample.SampleMapper" />
    </bean>

Es ist in Ordnung, wenn Sie einen Haltepunkt festlegen, nach dem Starten des Servers ordnungsgemäß anhalten und die Daten abrufen. Danke für deine harte Arbeit!

Recommended Posts

[Java] Abrufen von Daten aus der Datenbank mithilfe des Singleton-Dienstes in Spring (Boot)
Holen Sie sich Wettervorhersagen von Watson Weather Company Data mit einfachem Java
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
Datenverarbeitung mit der Stream-API von Java 8
Existiert mit der Spezifikation in Spring Data JPA
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Abrufen des Verlaufs vom Zabbix-Server in Java
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Versuchen Sie, mit MyBatis im Micronaut + Kotlin-Projekt Daten aus der Datenbank abzurufen
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
Versuchen Sie, den CORBA-Dienst von Spring (Java) aus aufzurufen.
So erhalten Sie eine Klasse von Element in Java
Holen Sie sich Unixtime (Sekunden) von ZonedDateTime in Scala / Java
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
◆ Rufen Sie die von Spring Boot erstellte API von React ab
[Java] KFunction von Method / Constructor in Java abrufen [Kotlin]
[Spring Boot] So rufen Sie Eigenschaften dynamisch aus einer in einer URL enthaltenen Zeichenfolge ab
Beispielcode für die DB-Steuerung durch deklarative Transaktion mit Spring Boot + Spring Data JPA
Löschen Sie alle aus dem Java SDK in Azure CosmosDB
Testen Sie die Klasse mit Feldinjektion im Spring-Boot-Test, ohne den Spring-Container zu verwenden
Holen Sie sich Cookies im Frühling
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Aufrufen und Verwenden der API in Java (Spring Boot)
Holen Sie sich ganz einfach Ganzzahlen aus den Systemeigenschaften in Java
Ruft Attribute und Werte aus einer XML-Datei in Java ab
CData Software Hands-on (Twitter-Daten von der Java-Konsolenanwendung abrufen)
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
8 Dinge, die mit Spring Boot und JPA in die DB eingefügt werden müssen
Holen Sie sich mit Java eine nicht leere Sammlung aus einem optionalen Stream
So steuern Sie Transaktionen in Spring Boot ohne Verwendung von @Transactional
Legen Sie den Kontextparameter in Spring Boot fest
Versuchen Sie Spring Boot von 0 bis 100.
Importieren Sie Excel-Daten mit Java 2
Spring Boot 2 Multiprojekt mit Gradle
[Java] Thymeleaf Basic (Spring Boot)
[Java] KClass in Java herunterladen [Kotlin]
Importieren Sie Excel-Daten mit Java
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Verwenden von Mapper mit Java (Spring)
Tipps zur Spring Boot DB
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Importieren Sie Excel-Daten mit Java 3
Versuchen Sie es mit Spring Boot Security
Verwenden von Docker von Java Gradle
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Spring Boot DB-Verbindungspool
[Java] Abrufen von Datumsinformationen 10 Tage später in Millisekunden in der Datumsklasse
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
Hochladen und Herunterladen von Dateien mit Ajax mit Spring Boot (ohne JQuery)
Wird in Spring Boot mithilfe einer Bean-Definitionsdatei mit dem Namen application.xml angepasst
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
Unbekannter Fehler in Zeile 1 von pom.xml bei Verwendung von Spring Boot in Eclipse