Fre*_*ezY 2 spring weblogic spring-java-config
我一直在寻找这个问题,我无法使用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'
为什么应用程序无法正确找到数据库?谢谢!!!
我有同样的问题.如果你使用4.x版本的弹簧可能是原因.
您还应该检查Weblogic的JNDI树.如果重建项目后数据源从树中消失,那就是另一种症状
如果是这样的话,发生的事情是:
您的数据源实现了Closeable(因此也是AutoCloseable),无论您的Bean定义如何,上下文总是会调用shutdown方法
如下所示:SPR-12551:记录如何防止在关闭上下文时删除使用JavaConfig检索的JNDI DataSource
它被标记为文档问题,因为这是"预期"行为:
这个问题完全是关于文档的,因为我们决定不在框架级别实现任何东西
解决方案是将bean的destroy方法定义为空,例如:
@Bean(name = "dbDataSource", destroyMethod="")
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)
这个问题在本期中有所描述(SPR-13022:无法为AutoCloseable bean禁用Destroy回调).
PS:顺便说一下,似乎在早期的4.x版春天,你无法通过assing destroyMethod来覆盖这种行为.它表明此错误已在版本4.2 RC1上修复.
| 归档时间: |
|
| 查看次数: |
2813 次 |
| 最近记录: |