我正在尝试设置一个使用 Spring JDBC 模板的 Spring MVC 应用程序。我只有一个问题,Spring 似乎没有为 NamedParameterJdbcTemplate 获取我的 bean 配置。
网页.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/desk-servlet.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<display-name>Desk</display-name>
<servlet>
<servlet-name>desk</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>desk</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
办公 table servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>
<property name="url" value="jdbc:jtds:sqlserver://localhost:1433/desk_db;instance=SQLEXPRESS"/>
<property name="username" value="user"/>
<property name="password" value="pass"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<mvc:resources mapping="/resources/**" location="/resources/"/>
<context:component-scan base-package="com.myapplication.desk.mvc, com.myapplication.desk.persistence, com.myapplication.desk.service"/>
<context:annotation-config/>
<mvc:annotation-driven/>
</beans>
在我的代码中,我实现了一个 DAO 类,用于处理我的应用程序的数据库层,它像这样连接 bean:
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
当我使用“gradlew - bootRun”测试我的应用程序时,我得到了这个异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate]
found for dependency: expected at least 1 bean which qualifies as autowire
candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
我已经制作了所有其他基于配置的注释,这些注释似乎很好。所以我有两个问题:
非常感谢任何提示!非常感谢您花时间阅读本文。
最佳答案
解决您的问题
1 和 2 是不言自明的。
创建
application.properties
文件在 src\main\resources
包含数据源的设置。更多房源请见this section in the reference guide和properties的列表.spring.datasource.url=jdbc:jtds:sqlserver://localhost:1433/desk_db;instance=SQLEXPRESS
spring.datasource.username=user
spring.datasource.password=pass
创建一个可运行的类来引导您的应用程序。
package com.myapplication.desk;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public static MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
现在要么运行这个类来引导你的应用程序,要么使用
gradlew -bootRun
.我更喜欢只运行这个类。Spring Boot 将负责设置
JdbcTemplate
和 NamedParameterJdbcTemplate
基于它在类路径上检测到的内容。它也会处理暴露 /resources
以便在网络上提供这些内容。这是由于添加了 @EnableAutoConfiguration
.我强烈建议阅读 Spring Boot Reference Guide看看the samples
关于spring gradle bootrun 忽略 web xml/自定义调度程序 servlet 配置 NoSuchBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405889/