6

JdbcTemplate以下に示すように、Springconfigを介して構成されたSpringを使用します。データソースを挿入せずにこれを行う方法はありますか?JdbcTemplateプログラムでインスタンスを作成し、を使用してデータソースを「初期化」したいと思いますTheOracleDS

現在の構成:

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>

更新:私がこれを求めている理由は、依存性注入/SpringにBeanを管理させることを完全に信じているわけではないからです。

4

3 に答える 3

6

これが私が書いたプロジェクトからのサンプルコードです:

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);
于 2009-11-22T16:44:07.787 に答える
6

なぜそれをしたいのかわかりませんが...Springの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)

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

于 2009-11-22T17:17:23.523 に答える
3

生のJNDIルックアップを使用するだけです。

public void setDataSourceName(String name) {
    InitialContext ctx = new InitialContext();
    jdbcTemplate = new JdbcTemplate((DataSource) ctx.lookup(name));
}
于 2009-11-22T17:25:19.697 に答える