Mar*_*eon 6 java spring dependency-injection spring-jdbc
我们使用JdbcTemplate通过Spring配置配置的Spring,如下图所示.有没有办法在不注入数据源的情况下执行此操作?我想以JdbcTemplate编程方式创建实例并使用"初始化"数据源TheOracleDS.
我们目前的配置:
Java类
private JdbcTemplate jdbcTemplate;
@Resource(name = "myDataSource")
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
Run Code Online (Sandbox Code Playgroud)
Spring配置
<jee:jndi-lookup id="myDataSource" jndi-name="java:/TheOracleDS"/>
Run Code Online (Sandbox Code Playgroud)
Oracle数据源配置
<xa-datasource>
<jndi-name>TheOracleDS</jndi-name>
...
</xa-datasource>
Run Code Online (Sandbox Code Playgroud)
更新:原因我问这是我不完全相信依赖注入/使用Spring管理bean ..
不确定为什么要这样做但是...你可以用Spring查找JDNI数据源JndiDataSourceLookup:
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
lookup.setResourceRef(true); // if the lookup occurs in a J2EE container
DataSource ds = lookup.getDataSource(jndiName);
Run Code Online (Sandbox Code Playgroud)
或者只使用Sun的类执行"手动"查找:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB");
Run Code Online (Sandbox Code Playgroud)
然后,只需将数据源引用传递给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);
Run Code Online (Sandbox Code Playgroud)
如果我使用注射,也许我的代码会更简单,但这是一个很好的例子,说明如何在不使用注射的情况下执行此操作.
您可以使用org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup对象通过JDNI名称查找所需的数据源.
DataSource dataSource = new JndiDataSourceLookup().getDataSource("java:/TheOracleDS")
SimpleJdbcTemplate db=new SimpleJdbcTemplate(dataSource);
Run Code Online (Sandbox Code Playgroud)
只需使用原始 JNDI 查找:
public void setDataSourceName(String name) {
InitialContext ctx = new InitialContext();
jdbcTemplate = new JdbcTemplate((DataSource) ctx.lookup(name));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12835 次 |
| 最近记录: |