Sono nuovo di Spring-Batch (e Spring in generale) e ho seguito la documentazione in linea per insegnare a me stesso cosa ho bisogno di svolgere questa attività. Sto cercando di connettermi a un database DB2.Ricevo DataSource non supportato quando si utilizza DataSouceBuilder
Se io dichiaro la connessione DB2 con XML come questo:
<bean id="wcs_dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" />
<property name="url" value="jdbc:db2://127.0.0.1/DEV" />
<property name="username" value="user" />
<property name="password" value="pass5" />
</bean>
quindi caricarlo nel mio codice in questo modo:
@Bean
public JdbcCursorItemReader<Product> databaseItemReader() {
ApplicationContext context =
new ClassPathXmlApplicationContext("context-datasource.xml");
DataSource dataSource = (DataSource) context.getBean("wcs_dataSource");
((ConfigurableApplicationContext)context).close();
JdbcCursorItemReader<Product> result = new JdbcCursorItemReader<Product>();
result.setDataSource(dataSource);
result.setSql(sqlString);
result.setRowMapper(new ProductRowMapper());
return result;
}
Funziona perfettamente. Come mai Vorrei utilizzare il DataSourceBuilder come gli esempi mostrano quindi in ultima analisi, vorrei arrivare a:
@ConfigurationProperties(prefix="DEV.datasource")
public DataSource Wcs_DataSource(){
return DataSourceBuilder.create().build();
}
Ma per qualche ragione che non funziona. Ottengo
Causato da: java.lang.IllegalStateException: No supportato tipo DataSource trovato
Ho anche provato:
public DriverManagerDataSource dataSource() {
DataSourceBuilder DSBuilder = DataSourceBuilder.create();
DSBuilder.url("jdbc:db2://127.0.0.1/DEV");
DSBuilder.username("user");
DSBuilder.password("password");
DSBuilder.driverClassName("com.ibm.db2.jcc.DB2Driver");
DriverManagerDataSource result = (DriverManagerDataSource) DSBuilder.build();
return result;
}
E ottengo lo stesso errore. Se lo eseguo nel debugger, posso vedere che l'errore si verifica su .build().
Sono sicuro che mi manca qualcosa di facile, ma non riesco a capirlo.
Prima di tutto il 'build' restituisce un' DataSource' e questo dovrebbe essere il tipo che si restituisce, non trasmetterlo a un 'DriverManagerDataSource' dato che fallirà. Per usare 'DataSourceBuilder' è necessario avere' commons-dbcp', 'tomcat-jdbc' o' hikaricp' sul classpath altrimenti non funzionerà. Non hai uno di quelli che riceverai il messaggio non appena avrai ottenuto. Un'altra cosa è che hai davvero bisogno di uno spazio dei nomi personalizzato ('DEV.datasource') perché non utilizzare semplicemente l'impostazione predefinita? –
Lo spazio dei nomi sarà perché ci sarà più di un'origine dati. Questa è la documentazione che stavo seguendo per questo: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html Ho provato senza e con DriverManagerDataSource con gli stessi risultati. C'era un altro howto che stavo osservando che usava quello. Così l'ho provato (a quel punto stavo afferrando le cannucce), ma non è stato d'aiuto. L'ho rimosso da quando ho postato questo. MA aggiungere commons-dbcp alle mie dipendenze ha funzionato! Grazie! – VydorScope