Spring Batch dient zur Verwendung einer Datenbank zum Speichern des Status von Jobs und anderen Dingen.
Es ist normalerweise praktisch, aber es ist ein wenig ärgerlich, wenn es nicht so schwer ist.
Es ist eine Methode, die eine solche Tabelle nicht verwendet oder erstellt.
Dieser Artikel war sehr hilfreich. : smile: Wenn Sie die Metatabelle nicht in Spring Batch verwenden möchten, sie aber verwendet wird
Die Tabelle wird erstellt, während Spring Boot sie automatisch konfiguriert.
Du kannst es gut machen.
Aber diesmal wird es weggelassen.
Fügen Sie der Eigenschaftendatei oder der Yaml-Datei die folgenden Einstellungen hinzu.
application.properties
spring.batch.initializer.enabled=false
Bitte lesen Sie diesen Artikel. Wenn Sie die Metatabelle nicht in Spring Batch verwenden möchten, sie aber verwendet wird
Alternativ können Sie Ihre eigene BatchConfigurer-Klasse erstellen (ich habe sie erstellt, weil ich einen Umweg gemacht habe).
MyBatchConfigurer.java
import javax.annotation.PostConstruct;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.core.configuration.BatchConfigurationException;
import org.springframework.batch.core.configuration.annotation.BatchConfigurer;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.explore.support.MapJobExplorerFactoryBean;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
/**
*Verwenden Sie das Job Repository ohne Datenbank
*
*/
@Component
public class MyBatchConfigurer implements BatchConfigurer {
private static final Log LOG = LogFactory.getLog(MyBatchConfigurer.class);
private PlatformTransactionManager transactionManager;
private JobRepository jobRepository;
private JobLauncher jobLauncher;
private JobExplorer jobExplorer;
@PostConstruct
public void initialize() {
if (this.transactionManager == null) {
LOG.info("Create ResourceLessTransactionManager.");
this.transactionManager = new ResourcelessTransactionManager();
}
try {
MapJobRepositoryFactoryBean repoFactory
= new MapJobRepositoryFactoryBean(this.transactionManager);
repoFactory.afterPropertiesSet();
this.jobRepository = repoFactory.getObject();
MapJobExplorerFactoryBean explFactory
= new MapJobExplorerFactoryBean(repoFactory);
explFactory.afterPropertiesSet();
this.jobExplorer = explFactory.getObject();
this.jobLauncher = createJobLauncher();
} catch (Exception ex) {
LOG.fatal(ex.getMessage(), ex);
throw new BatchConfigurationException(ex);
}
}
protected JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher launcher = new SimpleJobLauncher();
launcher.setJobRepository(jobRepository);
launcher.afterPropertiesSet();
return launcher;
}
@Override
public JobRepository getJobRepository() throws Exception {
return jobRepository;
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return transactionManager;
}
@Override
public JobLauncher getJobLauncher() throws Exception {
return jobLauncher;
}
@Override
public JobExplorer getJobExplorer() throws Exception {
return jobExplorer;
}
}
Als ich es deaktivierte, musste ich verschiedene Klassen erstellen, also habe ich es aktiviert.
Ich habe Batch Configurer selbst vorbereitet, daher scheint es in Ordnung zu sein.
Recommended Posts