[JAVA] Verwendung des In-Memory-Job-Repositorys mit Spring Batch

Spring Batch verwendet standardmäßig ein DB-basiertes Job-Repository, sodass eine Tabelle für die Jobverwaltung ohne Berechtigung erstellt wird. Wenn Sie ein DB-Benutzer sind, der keine Berechtigung zum Erstellen von Tabellen hat, oder wenn Sie Bedenken hinsichtlich der Leistung haben, können Sie das In-Memory-Job-Repository verwenden. Im Fall des In-Memory-Job-Repositorys sind Funktionen wie Neustart jedoch nicht verfügbar. Ob sie verwendet werden sollen, hängt also von den nicht funktionalen Anforderungen ab.

Note that the in-memory repository is volatile and so does not allow restart between JVM instances. It also cannot guarantee that two job instances with the same parameters are launched simultaneously, and is not suitable for use in a multi-threaded Job, or a locally partitioned Step. So use the database version of the repository wherever you need those features.

Lösung 1

Die einfachste Lösung besteht darin, die AutoConfig der DataSource nicht zu verwenden.

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class DemoApplication {

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

[Spring Batch 3.0.8.RLEASE API](http: // https: //docs.spring.io/spring-batch/trunk/apidocs/) Erläuterung des Annotationstyps Aktivieren Sie die Stapelverarbeitung

If a user does not provide a DataSource within the context, a Map based JobRepository will be used.

Lösung 2

Selbst wenn die DataSource AutoConfig ist, können Sie das kartenbasierte JobRepository verwenden, indem Sie JobRepository, JobExplorer und JobLauncher überschreiben.


@Configuration
@EnableBatchProcessing
public class BatchConfig {

	......
    
	/**
	 * in-Verwenden Sie das Speicherjob-Repository
	 * 
	 * @return
	 */
	@Bean
	DefaultBatchConfigurer batchConfigurer() {
		return new DefaultBatchConfigurer() {
			
			private JobRepository jobRepository;
			private JobExplorer jobExplorer;
			private JobLauncher jobLauncher;

			{
				MapJobRepositoryFactoryBean jobRepositoryFactory = new MapJobRepositoryFactoryBean();
				try {
					this.jobRepository = jobRepositoryFactory.getObject();
					MapJobExplorerFactoryBean jobExplorerFactory = new MapJobExplorerFactoryBean(jobRepositoryFactory);
					this.jobExplorer = jobExplorerFactory.getObject();
					SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
					jobLauncher.setJobRepository(jobRepository);
					jobLauncher.afterPropertiesSet();
					this.jobLauncher = jobLauncher;
					
				} catch (Exception e) {
				}
			}

			@Override
			public JobRepository getJobRepository() {
				return jobRepository;
			}

			@Override
			public JobExplorer getJobExplorer() {
				return jobExplorer;
			}

			@Override
			public JobLauncher getJobLauncher() {
				return jobLauncher;
			}
		};
	}
}

Ändern Sie application.properties wie folgt, um die Generierung der Metadatentabelle zu verhindern.

application.properties


spring.batch.initializer.enabled=false

Referenz: https://blog.ik.am/entries/409 https://qiita.com/blackawa/items/e9eaa254cbe27e257e10

Recommended Posts

Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Wie man Lombok im Frühling benutzt
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Verwendung von InjectorHolder in OpenAM
Verwendung von ModelMapper (Spring Boot)
Wie verwende ich Klassen in Java?
Aufrufen und Verwenden der API in Java (Spring Boot)
[Tutorial] Spring Batch
Ich habe Spring Batch ausprobiert
Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Schleifenschritt mit Spring Batch
Dinge, die beim Ausführen eines bestimmten Jobs mit Spring Batch zu beachten sind
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Verwendung des benannten Volumes in docker-compose.yml
Wie kann ich Spring Tool in Eclipse 4.6.3 einbinden?
Verwendung von MySQL im Rails-Tutorial
So legen Sie ein Profil mit annotationsbasierter Konfiguration im Spring-Framework fest und verwenden es
Verwendung von Umgebungsvariablen in RubyOnRails
Verstehe in 5 Minuten !! Wie man Docker benutzt
Verwendung von credentials.yml.enc aus Rails 5.2
Verwendung von ExpandableListView in Android Studio
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung des eingebauten h2db mit Federstiefel
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Verwendung von JQuery in Rails 6 js.erb
So binden Sie mit einer Eigenschaftendatei in Spring Boot
So definieren Sie mehrere orm.xml in Spring4, JPA2.1
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Verwenden Sie Interceptor im Frühjahr
Verwendung von MapStruct
Verwendung von TreeSet
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
Verwendung von Struts2 * Spring Framework (Spring Plugin) Version Juni 2017
Verwendung der Z3-Bibliothek in Scala mit Eclipse
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
Verstehen Sie, wie Sie den JSON-Decoder von Swift in 3 Minuten verwenden
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So testen Sie den Bildschirm zum Hochladen von Dateien mit Spring + Selenium
Hinweise zur Verwendung regulärer Ausdrücke in Java
Verwendung der Ketten-API