All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redislabs.riot.db.DatabaseExportCommand Maven / Gradle / Ivy

The newest version!
package com.redislabs.riot.db;

import com.redislabs.riot.AbstractExportCommand;
import com.redislabs.riot.processor.DataStructureItemProcessor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Mixin;

import javax.sql.DataSource;
import java.util.Map;

@Slf4j
@Data
@EqualsAndHashCode(callSuper = true)
@Command(name = "export", description = "Export to a database")
public class DatabaseExportCommand extends AbstractExportCommand> {

    @CommandLine.Parameters(arity = "1", description = "SQL INSERT statement.", paramLabel = "SQL")
    private String sql;
    @Mixin
    private DataSourceOptions dataSourceOptions = new DataSourceOptions();
    @Mixin
    private DatabaseExportOptions exportOptions = new DatabaseExportOptions();

    @Override
    protected Flow flow(StepBuilderFactory stepBuilderFactory) throws Exception {
        log.debug("Creating data source: {}", dataSourceOptions);
        DataSource dataSource = dataSourceOptions.dataSource();
        String name = dataSource.getConnection().getMetaData().getDatabaseProductName();
        log.debug("Creating {} database writer: {}", name, exportOptions);
        JdbcBatchItemWriterBuilder> builder = new JdbcBatchItemWriterBuilder<>();
        builder.itemSqlParameterSourceProvider(MapSqlParameterSource::new);
        builder.dataSource(dataSource);
        builder.sql(sql);
        builder.assertUpdates(exportOptions.isAssertUpdates());
        JdbcBatchItemWriter> writer = builder.build();
        writer.afterPropertiesSet();
        DataStructureItemProcessor processor = DataStructureItemProcessor.builder().keyRegex(exportOptions.getKeyRegex()).build();
        return flow(step(stepBuilderFactory, processor, writer).build());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy