簡體   English   中英

如何以編程方式使用Spring的JdbcTemplate?

[英]How to programmatically use Spring's JdbcTemplate?

我們使用Spring的JdbcTemplate ,它通過Spring配置配置,如下圖所示。 有沒有辦法在不注入數據源的情況下執行此操作? 我想以編程方式創建JdbcTemplate實例,並使用TheOracleDSTheOracleDS ”數據源。

我們目前的配置:

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>

更新 :原因我問這是我不完全相信依賴注入/使用Spring管理bean ..

不確定為什么要這樣做但是......你可以使用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)

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

這是我編寫的項目的一些示例代碼:

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);

只需使用原始JNDI查找:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM