目前我正在将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>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我设法转换此代码:
<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;
}
Run Code Online (Sandbox Code Playgroud)
还有这个 :
<beans:bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" >
<beans:property name="dataSource" ref="dbDataSource"></beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
对此:
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
return jt;
}
Run Code Online (Sandbox Code Playgroud)
问题是该方法的setDataSource()需要DataSource对象,但我不知道如何与两个bean.How到JndiObjectFactoryBean中传递给数据源?
或者我需要使用其他方法吗?
额外问题:
的bean.setJndiName("${db.jndi}"),$ {} db.jndi是指属性文件,但我总是得到的NameNotFoundException,如何使它工作?
谢谢!!
我一直在寻找这个问题,我无法使用java配置找到jndi数据库.在此之前我使用xml及其工作完美但在java配置中它会导致问题;
Xml代码:
<!-- Jndi database connection -->
<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>
Run Code Online (Sandbox Code Playgroud)
Java配置现在:
@Bean(name = "dbDataSource")
public DataSource dataSource(@Value("${db.jndi}") String jndiName)
{
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
return lookup.getDataSource(jndiName);
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource ds) {
return new JdbcTemplate(ds);
}
Run Code Online (Sandbox Code Playgroud)
属性文件:
db.jndi=jndi/myData
Run Code Online (Sandbox Code Playgroud)
weblogic中的JNDI名称:
jndi/myData
Run Code Online (Sandbox Code Playgroud)
更改为java配置后,有时系统可以读取数据库但很少发生,直到我清理并重新启动计算机然后它才能找到数据库,但通常它总是触发:
javax.naming.NameNotFoundException: Unable to resolve 'jndi.myData'. Resolved 'jndi'; remaining name 'myData'
为什么应用程序无法正确找到数据库?谢谢!!!