diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
index ef31818f470b918ebeafd3f777b963bf4c02cd72..a141b493a3e7f2ef6acbe2f728cd24e6c01f2631 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
@@ -49,7 +49,7 @@ public class BatchConfiguration
 		this.destinationCategoryRepository = destinationCategoryRepository;
 	}
 
-	@Bean
+	@Bean(name="migrateJob")
 	public Job createJob()
 	{
 		return jobBuilderFactory.get("Migrate from h2 to postgresql")
@@ -71,6 +71,7 @@ public class BatchConfiguration
 				.writer(new GenericWriter<>(destinationImageRepository))
 				.listener(new GenericChunkListener("image"))
 				.listener(new GenericStepListener("images"))
+				.allowStartIfComplete(true)
 				.build();
 	}
 
@@ -84,6 +85,7 @@ public class BatchConfiguration
 				.writer(new GenericWriter<>(destinationIconRepository))
 				.listener(new GenericChunkListener("icon"))
 				.listener(new GenericStepListener("icons"))
+				.allowStartIfComplete(true)
 				.build();
 	}
 
@@ -97,6 +99,7 @@ public class BatchConfiguration
 				.writer(new GenericWriter<>(destinationCategoryRepository))
 				.listener(new GenericChunkListener("category"))
 				.listener(new GenericStepListener("categories"))
+				.allowStartIfComplete(true)
 				.build();
 	}
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/DatabaseMigratorMain.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/DatabaseMigratorMain.java
index f176618cadc6ec9dafc448bea1d7598f0aa4755d..c043489cb1c0f10c700da366085722dd313e582e 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/DatabaseMigratorMain.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/DatabaseMigratorMain.java
@@ -1,13 +1,35 @@
 package de.deadlocker8.budgetmaster.databasemigrator;
 
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.JobParametersBuilder;
+import org.springframework.batch.core.launch.JobLauncher;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
-public class DatabaseMigratorMain
+public class DatabaseMigratorMain implements CommandLineRunner
 {
+	private final JobLauncher jobLauncher;
+
+	@Qualifier("migrateJob")
+	private final Job migrateJob;
+
+	public DatabaseMigratorMain(JobLauncher jobLauncher, Job migrateJob)
+	{
+		this.jobLauncher = jobLauncher;
+		this.migrateJob = migrateJob;
+	}
+
 	public static void main(String[] args)
 	{
 		SpringApplication.run(DatabaseMigratorMain.class, args);
 	}
+
+	@Override
+	public void run(String... args) throws Exception
+	{
+		jobLauncher.run(migrateJob, new JobParametersBuilder().toJobParameters());
+	}
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/SchedulerConfig.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/SchedulerConfig.java
deleted file mode 100644
index 7b6f6cd83d64a10d4f5a6726f8fc5e4eb80336d4..0000000000000000000000000000000000000000
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/SchedulerConfig.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package de.deadlocker8.budgetmaster.databasemigrator;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.batch.core.*;
-import org.springframework.batch.core.launch.JobLauncher;
-import org.springframework.batch.core.launch.JobOperator;
-import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
-import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
-import org.springframework.batch.core.repository.JobRestartException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-
-@Configuration
-@EnableScheduling
-public class SchedulerConfig
-{
-	private static final Logger LOGGER = LoggerFactory.getLogger(SchedulerConfig.class);
-
-	final JobLauncher jobLauncher;
-	final JobOperator jobOperator;
-	final Job job;
-
-	@Autowired
-	public SchedulerConfig(JobLauncher jobLauncher, JobOperator jobOperator, Job job)
-	{
-		this.jobLauncher = jobLauncher;
-		this.jobOperator = jobOperator;
-		this.job = job;
-	}
-
-	@Scheduled(fixedDelay = Long.MAX_VALUE, initialDelay = 1000)
-	public void scheduleByFixedRate() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException
-	{
-		LOGGER.info("Starting migration...");
-		final JobParameters jobParameters = new JobParametersBuilder()
-				.addString("time", LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
-				.toJobParameters();
-		final JobExecution execution = jobLauncher.run(job, jobParameters);
-
-		LOGGER.info("Migration DONE");
-
-		System.exit(0);
-	}
-}