2009-11-22 7 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); 
} 

春のコンフィグ

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

のOracleデータソースの設定

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

更新:私はこれを求めている理由は、私は春の豆を管理した依存性の注入/内の合計信者ではないよ..です

+3

を本当の問題は:なぜ注入は、ここでは望ましいことではありませんか?あなたがあなたを買うことを提案しているやり方は何ですか? – duffymo

+2

私はSpring JDBCで非注入ルートを前にしましたが、データベース内の何かをチェックするためのmainメソッドを実行したいユーティリティクラスに対してのみ行っています。その場合、XMLを書いてそれを探し出すのはちょっと残酷すぎるようです。しかし、いったんJNDIが混在すると、実際には注射を使わない事例はないようです。 –

答えて

3

ただ、生JNDIルックアップを使用します。

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

ここで私がきたプロジェクトからいくつかのサンプルコードがあります私が注射を使用した場合、私のコードはもっと簡単になるかもしれませんが、これは注射を使わずにこれを行う方法の良い例です。

org.springframework.jdbc.datasource.lookup.JndiDataSourceLookupオブジェクトを使用して、JDNI名で必要なデータソースを見つけることができます。

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

わからないあなたがそれをやりたいけど...あなたは春のJndiDataSourceLookupとJDNIデータソースをルックアップた理由:

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)を呼び出します。

しかし、私が言ったように、なぜ注射を使いたくないのか分かりません。

関連する問題