0

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

Répondre

0

Spring Boot docs:

connexions de base de données de production peuvent également être configurés automatiquement à l'aide d'une mise en commun de DataSource . Voici l'algorithme pour choisir une implémentation spécifique :

  • Nous préférons la mise en commun de Tomcat DataSource pour ses performances et de la concurrence, donc si cela est disponible, nous choisissons toujours.
  • Sinon, si HikariCP est disponible, nous l'utiliserons.
  • Si ni la source de données de pool Tomcat ni HikariCP ne sont disponibles et si Commons DBCP est disponible, nous l'utiliserons, mais nous ne le recommandons pas en production.
  • Enfin, si Commons DBCP2 est disponible, nous allons l'utiliser.

Si vous utilisez le printemps-boot-démarreur ou jdbc printemps-boot-démarreur-data-JPA « entrées », vous obtiendrez automatiquement une dépendance à tomcat-jdbc.

Vous devriez donc avoir des valeurs par défaut raisonnables.

+0

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. –