如何将jndi查找从xml转换为java配置

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

Xml配置:

    

到目前为止,我设法转换此代码:

对此:

 @Bean(name = "dbDataSource") public JndiObjectFactoryBean dataSource() { JndiObjectFactoryBean bean = new JndiObjectFactoryBean(); bean.setJndiName("${db.jndi}"); bean.setResourceRef(true); return bean; } 

还有这个 :

     

对此:

 @Bean(name = "jdbcTemplate") public JdbcTemplate jdbcTemplate() { JdbcTemplate jt = new JdbcTemplate(); jt.setDataSource(dataSource); return jt; } 

问题是方法setDataSource()需要DataSource对象,但我不确定如何关联两个bean。如何将JndiObjectFactoryBean传递给DataSource?

或者我需要使用其他方法吗?

额外问题:

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

谢谢!!

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

 @Bean(name = "dbDataSource") public DataSource dataSource(@Value("${db.jndi}" String jndiName) { JndiDataSourceLookup lookup = new JndiDataSourceLookup(); return lookup.getDataSource(jndiName); } 

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

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

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

 @Bean public JdbcTemplate jdbcTemplate(DataSource ds) { return new JdbcTemplate(ds); }