[Java] Obtenir des données de la base de données à l’aide du service singleton dans Spring (Boot)

Obtenir des données de DB en utilisant le service singleton dans Spring (Boot)

・ DI pour enum ・ Économie de mémoire ・ Prend en charge une charge élevée avec la fonction de cache · Lecture seulement ・ Je l'utilise pour le classement, etc. ・ Prend en charge à la fois Spring Framework et Spring Boot ・ Pour les cartographes, veuillez lire et définir comme il convient. -Initialiser lors de la mise à jour du contexte

environnement

・ Spring Framework 4.2.9 ・ Botte à ressort 2.2.1 · Java 1.8 ・ Windows 10 64 bits

SampleRankingSingletonService · Service Singleton (enum) qui acquiert et conserve les données ・ Je veux DI mapper avec @Autowired, mais je ne peux pas, alors créez un service d'initialisation séparé. ・ Je pense qu'il vaut mieux ajouter un programme pour traiter les données. (L'émission de SQL est une lourde charge)

public enum SampleRankingSingletonService {

	INSTANCE;

	//Lecture de l'ajustement de la valeur du délai d'attente
	public static final int TIMEOUT_SEC = 1800;

	private static final Object lock = new Object();

	private LocalDateTime queryDate;

	//Dernier classement
	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(); // <-Emission SQL d'acquisition de classement
	}

	//Appelez avant d'effectuer le traitement des données
	public void initQuery() {
		synchronized(lock) {
			if (isTimeout() || latestRanking.size() <= 0) {
				reload();
			}
		}
	}

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

SampleRankingSingletonInitializerService ・ Généré automatiquement par DI

@Component
public class SampleRankingSingletonInitializerService {

	@Autowired
	private SampleMapper sampleMapper;

	//Définissez le mappeur DI dans le service singleton lors de la génération de beans
	@PostConstruct
	public void init() {
		SampleRankingSingletonService.INSTANCE.setSampleMapper(sampleMapper);
	}

	//Exécuter la première requête lors de la mise à jour du contexte(Spring Boot donne une erreur lors de l'exécution avec PostConstruct)       
	@EventListener
	public void onContextRefreshedEvent(ContextRefreshedEvent evt) {
		SampleRankingSingletonService.INSTANCE.initQuery();
	}

	public SampleMapper getSampleMapper() {
		return sampleMapper;
	}

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

Fichier XML pour DI

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

Ce n'est pas grave si vous définissez un point d'arrêt, arrêtez correctement après le démarrage du serveur et récupérez les données. Je vous remercie pour votre travail acharné!

Recommended Posts

[Java] Obtenir des données de la base de données à l’aide du service singleton dans Spring (Boot)
Obtenez les prévisions météorologiques de Watson Weather Company Data avec Java simple
Obtenez des informations d'erreur à l'aide de DefaultErrorAttributes et ErrorAttributeOptions dans Spring Boot 2.3
Traitement des données à l'aide de l'API de flux de Java 8
Existe en utilisant la spécification dans Spring Data JPA
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Créer un projet Java Spring Boot avec IntelliJ
Obtenir l'historique du serveur Zabbix en Java
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
Essayez d'obtenir des données de la base de données en utilisant MyBatis dans le projet Micronaut + Kotlin
GetInstance () à partir d'une classe @Singleton dans Groovy à partir de Java
Essayez d'appeler le service CORBA depuis Spring (Java)
Comment obtenir une classe depuis Element en Java
Obtenez unixtime (secondes) de ZonedDateTime dans Scala / Java
Conseils Java - Créez un projet Spring Boot avec Gradle
◆ Obtenez l'API créée par Spring Boot à partir de React
[Java] Obtenir KFunction à partir de la méthode / du constructeur en Java [Kotlin]
[Spring Boot] Comment obtenir des propriétés dynamiquement à partir d'une chaîne contenue dans une URL
Exemple de code pour le contrôle de la base de données par transaction déclarative avec Spring Boot + Spring Data JPA
Tout supprimer du SDK Java dans Azure CosmosDB
Testez la classe injectée sur le terrain dans le test de démarrage Spring sans utiliser le conteneur Spring
Obtenez des cookies au printemps
[Java] Déployer l'application Spring Boot sur Azure App Service
Comment appeler et utiliser l'API en Java (Spring Boot)
Obtenez facilement des entiers à partir des propriétés système en Java
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
Logiciel pratique CData (obtenir des données Twitter à partir de l'application console Java)
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
8 choses à insérer dans DB en utilisant Spring Boot et JPA
Obtenir une collection non vide à partir d'un flux facultatif avec java
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Définir le paramètre contextuel dans Spring Boot
Essayez Spring Boot de 0 à 100.
Importer des données Excel avec Java 2
Multi-projets Spring Boot 2 avec Gradle
[Java] Thymeleaf Basic (Spring Boot)
[Java] Obtenir KClass en Java [Kotlin]
Importer des données Excel avec Java
Application Java CICS-Run - (4) Application Spring Boot
Utilisation de Mapper avec Java (Spring)
Conseils relatifs à Spring Boot DB
Changements majeurs dans Spring Boot 1.5
NoHttpResponseException dans Spring Boot + WireMock
Importer des données Excel avec Java 3
Essayez d'utiliser Spring Boot Security
Utilisation de Docker depuis Java Gradle
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Pool de connexion de base de données Spring Boot
[Java] Obtenez des informations sur la date 10 jours plus tard en utilisant la milliseconde dans la classe Date
Obtenez une instance proxy du composant lui-même dans Spring Boot
Téléchargement et téléchargement de fichiers à l'aide d'Ajax avec Spring Boot (sans JQuery)
Intégré dans Spring Boot à l'aide d'un fichier de définition de bean nommé application.xml
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
Erreur inconnue dans la ligne 1 de pom.xml lors de l'utilisation de Spring Boot dans Eclipse