J'ai une application qui parcourt plusieurs bases de données et pour chaque base de données, exécute une requête sur toutes les tables et la place dans hadoop.jdbc connexion pool à l'aide de ThreadpoolExecutor dans spring boot
Ma conception consiste à créer une connexion de source de données à la fois et à utiliser le pool de connexions obtenu pour exécuter des requêtes select dans plusieurs threads. Une fois cela fait pour cette source de données, fermez la connexion et créez-en une nouvelle.
Voici le code Async
@Component
public class MySampleService {
private final static Logger LOGGER = Logger
.getLogger(MySampleService.class);
@Async
public Future<String> callAsync(JdbcTemplate template, String query) throws InterruptedException {
try {
jdbcTemplate.query(query);
//process the results
return new AsyncResult<String>("success");
}
catch (Exception ex){
return new AsyncResult<String>("failed");
}
}
Voici l'appelant
public String taskExecutor() throws InterruptedException, ExecutionException {
Future<String> asyncResult1 = mySampleService.callAsync(jdbcTemplate,query1);
Future<String> asyncResult2 = mySampleService.callAsync(jdbcTemplate,query2);
Future<String> asyncResult3 = mySampleService.callAsync(jdbcTemplate,query3);
Future<String> asyncResult4 = mySampleService.callAsync(jdbcTemplate,query4);
LOGGER.info(asyncResult1.get());
LOGGER.info(asyncResult2.get());
LOGGER.info(asyncResult3.get());
LOGGER.info(asyncResult4.get());
//now all threads finished, close the connection
jdbcTemplate.getConnection().close();
}
Je me demande si cela est une bonne façon de le faire ou faire une solution Exiting/optimisé hors de la boîte Il me manque. Je ne peux pas utiliser spring-data-jpa car mes requêtes sont complexes.
Merci
Je pense que vous avez mal compris ma question. Je sais que nous obtenons la source de données de pooling. mais ma question est d'utiliser cette source de données regroupées pour traiter plusieurs tables actuellement. –