目前,我正在将xml转换为java配置。但我坚持了一些我已经研究了几天的部分。这里的问题是:
Xml配置:
<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" />
对此:
@Bean(name = "dbDataSource")
public JndiObjectFactoryBean dataSource() {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName("${db.jndi}");
bean.setResourceRef(true);
return bean;
}
这是:
<beans:bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" >
<beans:property name="dataSource" ref="dbDataSource"></beans:property>
</beans:bean>
对此:
@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,如何使它工作?
谢谢!!
发布于 2016-01-12 23:22:17
而不是使用JndiObjectFactoryBean
,而是使用JndiDataSourceLookup
。要在方法中使用${db.jndi}
,请声明方法参数并使用@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);
}
https://stackoverflow.com/questions/34757609
复制相似问题