Spring StoredProcedure Inject parametri dichiarati o no?

0

Al lavoro uno dei miei colleghi mi ha chiesto di cambiare il modo in cui Spring StoredProcedure classe sottoclasse è stata inizializzata dall'iniettare i parametri con il meccanismo Iniezione di dipendenza (Constructor Injection) a un "più semplice e diretto" .

Il codice effettivo con l'inizializzazione DI assomiglia a:

<constructor-arg><ref bean="datasource"/></constructor-arg>
<constructor-arg value="STOREDPR"></constructor-arg>  
<constructor-arg>
<list>
                <bean parent="SQL.TIMESTAMP.IN">
                    <constructor-arg type="java.lang.String" value="parameter1" />
                </bean>
                <bean parent="SQL.TIMESTAMP.INOUT">
                    <constructor-arg type="java.lang.String" value="parameter2" />
                </bean>
                <bean parent="SQL.NUMERIC.IN">
                    <constructor-arg type="java.lang.String" value="parameter3" />
                </bean>
</list>
</constructor-arg>

Sottoclasse del costruttore iniettato StoredProcedure:

public AStoreProcedure(DataSource datasource, String procedureName, List<SqlParameter> params) {
    super(datasource, procedureName);

    for(SqlParameter p : params) 
        declareParameter(p);

    compile();
}

Secondo me la costruzione di un StoredProcedure con DI non è una cattiva idea dato che puoi cambiare la firma StoreProcedure (parametri dichiarati) senza dover cambiare il codice della tua applicazione, ma semplicemente modificando l'XML ...

Pensi che rimuovere il meccanismo DI in questo caso abbia senso? Quale potrebbe essere una buona alternativa?

    
posta aleroot 06.09.2015 - 19:47
fonte

2 risposte

1

Non c'è modo di eliminare possibili disaccordi run-time tra il tuo database e il tuo codice Java. La cosa migliore che puoi fare è far sì che il tuo codice Java dipenda solo dalle parti dello schema che sono necessarie per la tua logica aziendale ed esegui test di integrazione prima di passare alla produzione.

    
risposta data 06.09.2015 - 22:16
fonte
0

Puoi fare l'iniezione di dipendenza con la configurazione di Java. Io sono sempre più adattato e preferito.

Puoi fare qualcosa del genere per registrare il tuo bean:

  @Bean
  public StoredProcedure storedProcedure(DataSource dataSource) {
    StoredProcedure storedProcedure = new GenericStoredProcedure();
    storedProcedure.setDataSource(dataSource);
    SqlParameter param1 = new SqlParameter("parameter1", Types.VARCHAR);
    storedProcedure.declareParameter(param1);
    //..
    storedProcedure.compile();
    return storedProcedure;
  }
    
risposta data 06.09.2015 - 20:23
fonte

Leggi altre domande sui tag