【发布时间】:2019-07-29 21:37:42
【问题描述】:
我目前正在尝试使用 Spring Boot,并且正在尝试包含一个当前在 Java EE 上下文中使用的库类。
所述类有一个父类,它有一个带有 JNDI 查找名称的@Resource 注入。
在一个简化的示例中,所涉及的类如下所示:
Configuration.java
@Configuration
public class Facades {
@Bean
public Connection connection() {
return new Connection();
}
@Bean
public Facade facade(Connection connection) {
return new Facade(connection);
}
}
Facade + ParentFacade
public class ParentFacade {
@Resource(lookup = "eis/Connection") // <-- the problem
protected Connection connection;
}
public class Facade extends ParentFacade {
public Facade(Connection connection) {
this.connection = connection;
}
}
当我运行应用程序时,出现以下错误:
在 JNDI 中定义的名称为“eis/Connection”的 bean 定义无效 环境:JNDI 查找失败;嵌套异常是 javax.naming.NoInitialContextException: 需要指定类名 环境或系统属性,或作为小程序参数,或在 应用资源文件:java.naming.factory.initial
显然,我不需要@Resource 注入,因为我可以通过构造函数注入连接。
但是,Spring 总是尝试动态注入具有 JNDI 名称的 bean。
我尝试使用以下注释从 IoC 包含中排除该类,但没有任何区别:
@Configuration
@ComponentScan(
basePackages = "the.package",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = { Facade.class, ParentFacade.class }
)
)
我现在的问题是: 我也可以
- 让 Spring 忽略有问题的类中的
@Resource注释或 - 使用所需的 JNDI 名称 (eis/Connection) 注入
@Bean?
提前致谢!
附:
更改包含 @Resource 注释的库类不是一种选择
【问题讨论】:
-
你在哪里设置你的 JNDI InitialContext?那看起来像什么?
标签: spring spring-boot jndi