首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将jndi查找从xml转换为java config

如何将jndi查找从xml转换为java config
EN

Stack Overflow用户
提问于 2016-01-12 18:52:54
回答 1查看 13.6K关注 0票数 14

目前,我正在将xml转换为java配置。但我坚持了一些我已经研究了几天的部分。这里的问题是:

Xml配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     <jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" />

     <beans:bean id="jdbcTemplate"
     class="org.springframework.jdbc.core.JdbcTemplate" >
     <beans:property name="dataSource" ref="dbDataSource"></beans:property>
     </beans:bean>

到目前为止,我成功地转换了以下代码:

<jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" />

对此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean(name = "dbDataSource")
public JndiObjectFactoryBean dataSource() {
   JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
   bean.setJndiName("${db.jndi}");
   bean.setResourceRef(true); 
   return bean; 
}

这是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     <beans:bean id="jdbcTemplate"
     class="org.springframework.jdbc.core.JdbcTemplate" >
     <beans:property name="dataSource" ref="dbDataSource"></beans:property>
     </beans:bean>

对此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() { 
   JdbcTemplate jt = new JdbcTemplate();
    jt.setDataSource(dataSource);
    return jt;
   }

问题是setDataSource()需要DataSource对象的方法,但我不知道如何将两个bean.How之间的关系传递给DataSource?

还是我需要使用另一种方法?

额外问题:

bean.setJndiName("${db.jndi}")${db.jndi}是指属性文件,但我总是有NameNotFoundException,如何使它工作?

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 23:22:17

而不是使用JndiObjectFactoryBean,而是使用JndiDataSourceLookup。要在方法中使用${db.jndi},请声明方法参数并使用@Value对其进行注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean(name = "dbDataSource")
public DataSource dataSource(@Value("${db.jndi}") String jndiName) {
    JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    return lookup.getDataSource(jndiName);
}

自动处理的方法和构造函数也可以使用@Value注释。-春季参考指南。

@Bean方法基本上是工厂方法,它们也是自动连接的方法,因此属于这一类。

JdbcTemplate的工厂方法中,您可以简单地使用DataSource方法参数来获得对数据源的引用(如果有多个参数,可以在方法参数上使用@Qualifier来指定要使用的引用)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
public JdbcTemplate jdbcTemplate(DataSource ds) { 
    return new JdbcTemplate(ds);
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34757609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文