6
votes

Comment utiliser de manière programmée JDBCtemplate JDBCTTEM?

Nous utilisons jdbCtemplate code> qui est configuré via Spring config, comme illustré ci-dessous. Existe-t-il un moyen de le faire sans injecter la source de données? J'aimerais simplement créer le jdbctemplate code> instance programmatique et "initaliser" l'accès de données à l'aide de théoraclées code>.

Notre configuration actuelle: p>

Classe Java EM> P>

<xa-datasource>
      <jndi-name>TheOracleDS</jndi-name>
      ...
</xa-datasource>


2 commentaires

La vraie question est la suivante: pourquoi l'injection n'est-elle pas souhaitable ici? Qu'est-ce qui le fait comme vous proposez de vous acheter?


Je suis allé l'itinéraire non-injection avant avec Spring JDBC, mais uniquement pour les classes utilitaires où je veux juste exécuter une méthode principale pour vérifier quelque chose dans la base de données. Dans ce cas, la rédaction d'un XML et le regardant semble un peu trop excitée. Cependant, une fois que JNDI est dans le mélange, il semble que l'on n'ait vraiment pas un cas pour éviter d'utiliser une injection.


3 Réponses :


6
votes

Voici quelques échantillons de code d'un projet que j'ai écrit: xxx pré>

Peut-être que mon code serait plus simple si j'avais utilisé l'injection, mais c'est un bon exemple de comment faire cela sans utiliser injection. p>

vous pouvez utiliser un org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup code> pour trouver la source de données que vous voulez par nom JDNI. p>

DataSource dataSource = new JndiDataSourceLookup().getDataSource("java:/TheOracleDS")
SimpleJdbcTemplate db=new SimpleJdbcTemplate(dataSource);


0 commentaires

6
votes

Je ne sais pas pourquoi vous voulez faire cela, mais ... vous pouvez rechercher le jeu de données JDNI avec le printemps jndidatasourcelook : xxx

ou tout simplement effectuer un "manuel" Recherche à l'aide de classes de Soleil: xxx

Ensuite, passez simplement la référence de DataSource au JDBCTemplate constructeur ou appelez setdataSource (DS) .

Mais, comme je l'ai dit, je ne sais pas pourquoi vous ne voulez pas utiliser l'injection.


0 commentaires

3
votes

Utilisez simplement une recherche JNDI brute:

public void setDataSourceName(String name) {
    InitialContext ctx = new InitialContext();
    jdbcTemplate = new JdbcTemplate((DataSource) ctx.lookup(name));
}


0 commentaires