如何将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); }