【发布时间】:2016-04-03 21:13:55
【问题描述】:
我正在尝试使用 JdbcTemplate 制作 DAO。但似乎 Spring 注入并不顺利。我正在使用 Tomcat 的 JNDI 注入 DataSource。
我还在 Tomcats server.xml 中编写了设置,在 /META-INF 中编写了 ResourceLink,在 web.xml 中编写了资源引用,尝试在 web.xml 中添加上下文侦听器,它也没有帮助(实际上,我应该添加侦听器,如果我不是从 servlet 访问 DataSource,而只是从 DAO 访问?)。
我错过了什么,为什么 Spring 不注入它?
dao-context.xml
<context:component-scan base-package="somepackage"/>
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/phonebook" expected-type="javax.sql.DataSource"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
web.xml
<resource-ref>
<description>DatasourceJNDI</description>
<res-ref-name>jdbc/phonebook</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
META-INF/context.xml
<Context>
<ResourceLink name="jdbc/phonebook" global="jdbc/global_phonebook" type="javax.sql.DataSource"/>
Tomcat 中的 server.xml
<Resource name="jdbc/global_phonebook" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/phonebook" username="root" password="1234" maxActive="10" maxIdle="5" maxWait="-1" defaultAutoCommit="false" defaultTransactionIsolation="READ_COMMITTED"/>
tomcat 本地主机日志 http://shorttext.com/700e4579 tomcat catalina 日志 http://shorttext.com/700f24cb
【问题讨论】:
-
我假设,您在日志中没有异常,找不到数据源,所以我会说问题出在您的注入上?你是如何创建 DAO 的,请分享一下配置。
-
我在第 168 行有 NullPointerException。这一行有 jdbcTemplate.getDataSource() 方法。打印的 dataSource 变量,它说它是“null”,就像 jdbcTemplate 一样。所以我假设没有注入 JNDI。使用 Autowired 注解注入并使用 Repository 注解定义的 DAO。使用
在 context.xml 中扫描。 DAOs 注入工作。使用上下文配置更新问题。 -
你能发布堆栈跟踪吗?
-
当然。 StackOverflow 不允许粘贴,添加了有问题的 txt 的链接
标签: java spring tomcat datasource jndi