selectFieldsUserDataProcessorConfig

Criaremos a classe no pacote processor.

Terá um método chamado selectFieldsUserDataProcessor (nome da classe sem o Config). Ele retornará um ItemProcessor<UserDTO, User>. Dentro do método, daremos um return de um construtor: new ItemProcessor<UserDTO, User>().

Esse construtor nos obrigará a implementar um método chamado process.

Lembra da função read do ItemReader? Bom, a cada vez que o read é chamado ele vai lendo um UserDTO por vez, correto? Portanto, a medida que vamos lendo esse Usuário, precisamos processá-lo.

Processar entenda por fazer uma projeção dos campos que queremos.

Dentro do método instanciamos o User que criamos em entities e settamos a propriedade dos atributos que queremos tirando do UserDTO (que por sua vez, vem do ItemReader).

@Configuration 
public class selectFieldsUserDataProcessorConfig {

    private static Logger logger = LoggerFactory.getLogger(selectFieldsUserDataProcessorConfig.class);

    private int counter;

    @Bean            //esse UserDTO ele obtém através do ItemReader e retorna um User
    public ItemProcessor<UserDTO, User> selectFieldsUserDataProcessor() {
        return new ItemProcessor<UserDTO, User>() {
            @Override
            public User process(UserDTO item) throws Exception {
                User user = new User();
                user.setLogin(item.getLogin());
                user.setName(item.getName());
                user.setAvatarUrl(item.getAvatarUrl());
                logger.info("[PROCESSOR STEP] select user fields " + counter + user);
                counter++;
                return user;
            }
        };
    }
}

E olha que interessante, quando vemos o SOUT do no console, ele vai selecionar todos os atributos que colocamos de 10 em 10!

Atualizado