[JAVA] Einführung in SpringBoot + In-Memory Data Grid (Datenpersistenz)

Was ich letztes Mal gemacht habe

Beim letzten Mal habe ich SpringDataGeode verwendet, um eine SpringBoot-Anwendung zu erstellen, die ein speicherinternes Datenraster verwendet, und es so implementiert, dass die Ereignisverarbeitung durchgeführt werden kann, wenn die Daten mit dem Server synchronisiert werden.

Erstellen einer Anwendung mit SpringDataGeode

Implementierung der Ereignisverarbeitung mit SpringDataGeode

Was ist diesmal zu tun?

Behalten Sie die im Cache des speicherinternen Datenrasters auf der Festplatte registrierten Daten bei

Dieses Mal verwenden wir die Funktion von Spring Data Geode, um die im In-Memory-Cache registrierten Daten auf der lokalen Festplatte zu speichern. Wenn der im Cache integrierte Anwendungsserver gestartet wird, laden wir die Persistenzdatei und registrieren die Daten im Cache. ..

Nach der Untersuchung scheint es, dass es nur durch Hinzufügen einer Anmerkung realisiert werden kann.

ServerGeodeApplication.java


package spring.geode.server.geodeServer;

import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;
import org.springframework.data.gemfire.config.annotation.EnableDiskStore;
import org.springframework.data.gemfire.config.annotation.EnableDiskStore.DiskDirectory;
import org.springframework.data.gemfire.config.annotation.EnableLocator;
import org.springframework.data.gemfire.config.annotation.EnableManager;
import org.springframework.data.gemfire.config.annotation.PeerCacheApplication;
import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;

import spring.geode.geodeCommon.model.User;
import spring.geode.geodeCommon.region.UserRegion;
import spring.geode.server.geodeServer.repository.UserRepository;

@SpringBootApplication
@PeerCacheApplication(name = "SpringGeodeServerApplication", locators = "localhost[40404]")
@EnableGemfireRepositories(basePackageClasses = UserRepository.class)
//Diesmal wurde eine Annotation zur Datenpersistenz hinzugefügt
@EnableDiskStore(
		name="SimpleDiskStore",
		autoCompact=true,
		diskDirectories = @DiskDirectory(location="/hoge/fuga/SpringGeodeData")
		)
public class GeodeServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(GeodeServerApplication.class, args);
	}

	@Configuration
	@EnableLocator(port = 40404)
	@EnableManager(start = true)
	static class LocatorManagerConfiguration {
	}

	@Configuration
	static class CacheInitializer {
		
		@Bean
	    Region<Integer, User> userRegion(final GemFireCache cache) {
			return new UserRegion().createUserRegion(cache);
	    }
		
		@Bean
	    public ReplicatedRegionFactoryBean<Integer, User> replicatedRegion(GemFireCache cache) {
			return new UserRegion().createUserRegionFactory(cache);
	    }
	}
}

Durch Aktivieren von "@ EnableDiskStore" wird die Persistenzdatei an dem durch "diskDirectories" angegebenen absoluten Pfad ausgegeben.

Aus irgendeinem Grund wurde die Datei nicht ausgegeben. .. Ich habe versucht, einen Weg zu finden, um es mit Anmerkungen zu lösen, aber es hat nicht funktioniert. ..

Ich konnte nicht anders, also entschied ich mich, es direkt auf "Bean" zu setzen. ..

UserRegion.java


package spring.geode.geodeCommon.region;

import java.io.File;

import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;

import spring.geode.geodeCommon.listener.UserRegionListener;
import spring.geode.geodeCommon.model.User;

/**
 *Benutzer verwalten{@link Region}Einstellungen erstellen für
 *
 */
public class UserRegion {
	/**
	 * {@link Region}Erschaffen
	 * @param cache
	 * @return
	 */
	public Region<Integer, User> createUserRegion(final GemFireCache cache) {
		return cache.<Integer, User>getRegion("Users");
	}

	/**
	 * {@link Region}Nehmen Sie Einstellungen für vor
	 * @param cache
	 * @return
	 */
	public ReplicatedRegionFactoryBean<Integer, User> createUserRegionFactory(GemFireCache cache) {
		ReplicatedRegionFactoryBean<Integer, User> replicatedRegionFactory = new ReplicatedRegionFactoryBean<>();
		UserRegionListener[] listeners = { new UserRegionListener() };

		listeners[0] = new UserRegionListener();
		replicatedRegionFactory.setCacheListeners(listeners);
		replicatedRegionFactory.setClose(false);
		replicatedRegionFactory.setCache(cache);
		replicatedRegionFactory.setRegionName("Users");
		replicatedRegionFactory.setPersistent(true);
		return replicatedRegionFactory;
	}

	/**
	 * {@link Region}Legen Sie die Dateipersistenz für fest
	 * @param cache
	 * @param regionFactory
	 * @return
	 */
	public ReplicatedRegionFactoryBean<Integer, User> configDiskStore(GemFireCache cache,
			ReplicatedRegionFactoryBean<Integer, User> regionFactory) {
		File[] files = { new File("/hoge/fuga/SpringGeode/persistenceFile") };

		cache.createDiskStoreFactory()//
				.setAllowForceCompaction(true)//
				.setAutoCompact(true)//
				.setDiskDirs(files)//
				.create("SimpleDiskStore");

		regionFactory.setDiskStoreName("SimpleDiskStore");

		return regionFactory;
	}
}

Die Persistenzeinstellung erfolgt über die Methode configDiskStore. Ein DiskStore wird in Cache erstellt und Einstellungen für verschiedene Persistenzmethoden und Persistenzdateipfade werden festgelegt.

Einzelheiten finden Sie hier

Durch Aufrufen dieser Methode in der Anwendung und Registrieren der Bean wird die Persistenz endgültig abgeschlossen.

GeodeServerApplication.java


package spring.geode.server.geodeServer;

import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;
import org.springframework.data.gemfire.config.annotation.EnableLocator;
import org.springframework.data.gemfire.config.annotation.EnableManager;
import org.springframework.data.gemfire.config.annotation.PeerCacheApplication;
import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;

import spring.geode.geodeCommon.model.User;
import spring.geode.geodeCommon.region.UserRegion;
import spring.geode.server.geodeServer.repository.UserRepository;

@SpringBootApplication
@PeerCacheApplication(name = "SpringGeodeServerApplication", locators = "localhost[40404]")
@EnableGemfireRepositories(basePackageClasses = UserRepository.class)
public class GeodeServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(GeodeServerApplication.class, args);
	}

	@Configuration
	@EnableLocator(port = 40404)
	@EnableManager(start = true)
	static class LocatorManagerConfiguration {
	}

	@Configuration
	static class CacheInitializer {

		@Bean
		Region<Integer, User> userRegion(final GemFireCache cache) {
			return new UserRegion().createUserRegion(cache);
		}

		@Bean
		public ReplicatedRegionFactoryBean<Integer, User> replicatedRegion(GemFireCache cache) {
			UserRegion region = new UserRegion();
			return region.configDiskStore(cache, region.createUserRegionFactory(cache));
		}
	}
}

Mit dieser Option können Sie die Persistenzeinstellung für jede Region festlegen. Wenn Sie die Anwendung starten, können Sie die Daten aus der in DiskStore festgelegten Datei laden und im Cache registrieren.

Ich wollte es schnell mit Anmerkungen implementieren, aber ich bedauere, dass es nicht funktioniert hat. .. Sollte ich die "ReplicatedRegionFactoryBean" nicht selbst anpassen? ..

Wie auch immer, es ist gut, weil es dauerhaft gemacht werden kann.

Ich würde mich freuen, wenn ich RDB als Persistenzziel festlegen könnte, aber ich konnte nicht die Information erhalten, dass "SpringDataGeode" eine solche Funktion bereitstellen würde. Deshalb habe ich die Dateipersistenzfunktion einmal verwendet, um sie persistent zu machen. Sah.

Recommended Posts

Einführung in SpringBoot + In-Memory Data Grid (Datenpersistenz)
Einführung in Spring Boot + In-Memory-Datenraster (Ereignisverarbeitung)
Einführung in Spring Boot + In-Memory Data Grid
Einführung in Ruby 2
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Einführung in Java
Einführung in Doma
Einführung in JAR-Dateien
Einführung in Ratpack (8) -Session
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Einführung in Entwurfsmuster (Einführung)
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Einführung in den Befehl javac