es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer un archivo XML fragmentado múltiple en Spring batch Java.

Quiero leer varios fragmentos pero al guardarlos en la base de datos solo se inserta el último elemento. Adjunto el Reader, Writer, Getter Setter y archivo XML. En la clase Transaction, tengo la lista de elementos que quiero leer.

Código del Reader
A continuación está el código del reader.

Código del Writer
Código del Writer

Clase Getter Setter
Clase Getter Setter

Archivo XML
Archivo XML

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema podría deberse al hecho de que el escritor está configurado para insertar solo un elemento a la vez y, por lo tanto, al leer múltiples fragmentos, está insertando solo el último.

    Para solucionar este problema, puede modificar el código del escritor para utilizar inserciones por lotes en lugar de inserciones individuales. Puede hacer esto estableciendo el tamaño del lote como se muestra a continuación:

    @Bean
    public JdbcBatchItemWriter<transaction> writer() {
        JdbcBatchItemWriter<transaction> writer = new JdbcBatchItemWriter<transaction>();
        writer.setDataSource(dataSource);
        writer.setSql("insert into xml_sales(S_18_DESCRIPTION_GAS_COUPON,S_18_Description_Manufacturers,S_18_Description_Gift_Certificate,S_18_Description_Other_Coupon,S_11_Global_Payments_KIOSK_Merchant_ID,S_20_Global_Payments_Company,S_20_Global_Payments_Address_0,S_20_Global_Payments_Address_1, S_20_Global_Payments_Address_2, S_8_Global_Payments_Store,S_18_Description_Cash_Off,Item_Number,English_Description,French_Description,Department,Department_Description,Total_Without_Tax,Total_With_Tax,Quantity,GST,UPC,PCATS_PRODUCT_CODE,Price,Mix_And_Match_Group_Number,Price_Group,Deposit_Total,Material_Code,Unmodified_Price,Prompt_For_Price,Ticket_Number,Trans_Time_HHMMSS,Trans_Date,Amended_TRN_Date,Amended_TRN_Time) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    
        writer.setItemPreparedStatementSetter(new CompanyDetailsItemPreparedStmSetter());
        writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
        writer.setAssertUpdates(false);
        writer.setBatchSize(100);
        return writer;
    }
    

    Esto debería permitir al escritor insertar múltiples elementos a la vez y ayudar a resolver el problema de que solo se inserta el último elemento en la base de datos.

Comments are closed.