阅读文档here,使用@Resource注释看起来相当简单,但我遗漏了一些东西。当我在bean中使用它时,JNDI当前正在工作,如下所示:
<bean id="identDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/comp/env/jdbc/IdentCanada"/>
</bean>
<bean id="identJdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="identDataSource"/>
</property>
</bean>
...在context.xml中,条目如下:
<Resource name="jdbc/IdentCanada" auth="Container"
type="javax.sql.DataSource"
username="********" password="*******"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://*********\dev;databaseName=******"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
maxActive="50"
maxIdle="10">
</Resource>
这一切都很好,但是当我尝试使用@Resource引入jdbc / IdentCanada时,它总是为空。我读到了关于实例化时间的基于字段的注入与类注入,但是当我实际使用DataSource对象时它仍然是null。我这样使用它:
public class CalendarEmailUtility {
@Resource(mappedName = "java:/comp/env/jdbc/IdentCanada")
private DataSource dataSource;
....
}
我是否遗漏了与JNDIObjectFactory有关的内容?