2009-11-22 25 views
6

我們使用Spring的JdbcTemplate,它通過Spring配置進行配置,如下圖所示。有沒有辦法做到這一點,而不注入數據源?我想以編程方式創建JdbcTemplate實例,並使用TheOracleDS「初始化」數據源。如何以編程方式使用Spring的JdbcTemplate?

我們目前的配置:

Java類

private JdbcTemplate jdbcTemplate; 

@Resource(name = "myDataSource") 
public void setDataSource(DataSource dataSource) { 
    this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 

Spring配置

<jee:jndi-lookup id="myDataSource" jndi-name="java:/TheOracleDS"/> 

的Oracle數據源配置

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

更新:原因我問這是我沒有依賴注入完全相信/有春豆管理..

+3

真正的問題是:爲什麼是注射不可取嗎?你提議購買你的方式是什麼? – duffymo 2009-11-22 17:08:08

+2

我已經使用Spring JDBC的非注入路由,但只用於實用程序類,我只想運行一個主要方法來檢查數據庫中的某些東西。在這種情況下,編寫一個XML並查找它似乎有點矯枉過正。但是,一旦JNDI混合使用,看起來確實沒有避免使用注入的情況。 – 2009-11-22 18:22:39

回答

3

只需使用原始JNDI查找:

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

下面是從一個項目我有一些示例代碼採寫:

SimpleJdbcTemplate db; 
DataSource dataSource = new SingleConnectionDataSource(System.getProperty(
     "lingcog.db.connectstring"), 
     System.getProperty("lingcog.db.username"), 
     System.getProperty("lingcog.db.password"), false); 

db = new SimpleJdbcTemplate(dataSource); 

也許,如果我用過的注射我的代碼會更簡單,但是這是如何做到這一點不使用注射很好的例子。

您可以使用org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup對象通過JDNI名稱查找所需的數據源。

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

不知道爲什麼你要這麼做,但......你可以查找的JDNI數據源與Spring的JndiDataSourceLookup

JndiDataSourceLookup lookup = new JndiDataSourceLookup(); 
lookup.setResourceRef(true); // if the lookup occurs in a J2EE container 
DataSource ds = lookup.getDataSource(jndiName); 

或者只是使用Sun的類執行「手冊」查找:

Context ctx = new InitialContext(); 
DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB"); 

然後,只需將數據源引用傳遞給構造函數JdbcTemplate或調用setDataSource(ds)即可。

但是,正如我所說,我不知道爲什麼你不想使用注射。

相關問題