Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Mvc-JDBCDAO支持错误_Java_Spring Mvc_Annotations_Jdbctemplate - Fatal编程技术网

Java Spring Mvc-JDBCDAO支持错误

Java Spring Mvc-JDBCDAO支持错误,java,spring-mvc,annotations,jdbctemplate,Java,Spring Mvc,Annotations,Jdbctemplate,我得到以下错误: [C:\Users\Darin\apache-tomcat-6.0\webapps\crimeTrack\WEB-INF\classes\com\crimetrack\jdbc\JdbcCountryDAO.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is requi

我得到以下错误:

[C:\Users\Darin\apache-tomcat-6.0\webapps\crimeTrack\WEB-INF\classes\com\crimetrack\jdbc\JdbcCountryDAO.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1385)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:306)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1389)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1653)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1642)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required
jdbcDAOCountry.java

@Repository
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO{

    private final Logger logger = Logger.getLogger(getClass());

    @Autowired
    private JdbcTemplate jdbcTemplate;  

    public List<Country> getCountryList() {
        int countryId = 6;
        String countryCode = "AI";
        logger.debug("In getCountryList()");
        String sql = "SELECT * FROM TBLCOUNTRY WHERE countryId = ? AND countryCode = ?";
        logger.debug("Executing getCountryList String "+sql);

        Object[] parameters = new Object[] {countryId, countryCode};

        logger.info(sql);

        //List<Country> countryList = getJdbcTemplate().query(sql,new CountryMapper());

        List<Country> countryList = getJdbcTemplate().query(sql, parameters,new CountryMapper());
        return countryList;
    }



    public void saveCountry(Country country) {
        logger.debug("In saveCountry");

        String sql= "INSERT INTO crimetrack.tblcountry (countryName, countryCode) " + 
                    "VALUES (:countryName, :countryCode)";

        logger.debug("Executing saveCountry String " + sql);
        int count = getJdbcTemplate().update(sql,new MapSqlParameterSource()

                .addValue("countryName", country.getCountryName())
                .addValue("countryCode", country.getCountryCode()));
        logger.debug(count +" Rows affected in tblCountry");


    }

    public void updateCountry(Country country) {
        logger.debug("In updateCountry");

        String sql= "UPDATE crimetrack.tblcountry SET countryName = :countryName, "+
                    "countryCode = :countryCode WHERE countryId = :countryId";

        logger.debug("Executing updateCountry String " + sql);
        int count = getJdbcTemplate().update(sql,new MapSqlParameterSource()
                .addValue("countryId",country.getCountryId())
                .addValue("countryName", country.getCountryName())
                .addValue("countryCode", country.getCountryCode()));
        logger.debug(count +" Rows affected in tblCountry");

    }

    public static class CountryMapper implements ParameterizedRowMapper<Country>{

         public Country mapRow(ResultSet rs, int rowNum) throws SQLException {
                Country country = new Country();
                country.setCountryCode(rs.getString("countryCode"));
                country.setCountryId(rs.getInt("countryId"));
                country.setCountryName(rs.getString("countryName"));
                return country;
            }       
    }

}
@存储库
公共类JdbcCountryDAO扩展JDBCDAO支持实现CountryDAO{
私有最终记录器=Logger.getLogger(getClass());
@自动连线
私有JdbcTemplate JdbcTemplate;
公共列表getCountryList(){
int countryId=6;
字符串countryCode=“AI”;
debug(“在getCountryList()中”);
String sql=“从TBLContry中选择*,其中countryId=?和countryCode=?”;
debug(“正在执行getCountryList字符串”+sql);
对象[]参数=新对象[]{countryId,countryCode};
logger.info(sql);
//List countryList=getJdbcTemplate().query(sql,new CountryMapper());
List countryList=getJdbcTemplate().query(sql、参数、新CountryMapper());
返回国家列表;
}
公共无效存储国家/地区(国家/地区){
logger.debug(“在saveCountry”);
String sql=“插入crimetrack.tblcontry(countryName,countryCode)”+
“值(:countryName,:countryCode)”;
debug(“正在执行saveCountry字符串”+sql);
int count=getJdbcTemplate().update(sql,新的MapSqlParameterSource())
.addValue(“countryName”,country.getCountryName())
.addValue(“countryCode”,country.getCountryCode());
logger.debug(计数+“TBLContry中受影响的行”);
}
公共无效更新国家(国家/地区){
logger.debug(“在updateCountry中”);
String sql=“UPDATE crimetrack.tblcontry SET countryName=:countryName,”+
“countryCode=:countryCode,其中countryId=:countryId”;
debug(“正在执行updateCountry字符串”+sql);
int count=getJdbcTemplate().update(sql,新的MapSqlParameterSource())
.addValue(“countryId”,country.getCountryId())
.addValue(“countryName”,country.getCountryName())
.addValue(“countryCode”,country.getCountryCode());
logger.debug(计数+“TBLContry中受影响的行”);
}
公共静态类CountryMapper实现了ParameterizedRowMapper{
公共国家/地区映射行(结果集rs,int rowNum)引发SQLException{
国家=新国家();
country.setCountryCode(rs.getString(“countryCode”);
country.setCountryId(rs.getInt(“countryId”);
country.setCountryName(rs.getString(“countryName”));
返回国;
}       
}
}
applicationContext.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:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xmlns:context="http://www.springframework.org/schema/context"

         xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 



<!-- __________________________________________________________________________________________________ -->              

    <bean id="countryManager" class="com.crimetrack.service.CountryManager">
        <property name="countryDao" ref="countryDao"/>
    </bean>
    <bean id="countryDao" class="com.crimetrack.jdbc.JdbcCountryDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!-- __________________________________________________________________________________________________ -->

    <bean id="authenticationManager" class="com.crimetrack.service.AuthenticationManager">
        <property name="loginDao" ref="loginDao" /> 
    </bean>    
    <bean id="loginDao" class="com.crimetrack.jdbc.JdbcLoginDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>
<!-- __________________________________________________________________________________________________ -->  

    <bean id="divisionManager" class="com.crimetrack.service.DivisionManager">
        <property name="divisionDao" ref="divisionDao"/>
    </bean>    
    <bean id="divisionDao" class="com.crimetrack.jdbc.JdbcDivisionDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!-- __________________________________________________________________________________________________ -->    

     <bean id="positionManager" class="com.crimetrack.service.PositionManager">
        <property name="positionDao" ref="positionDao"/>
    </bean>    
    <bean id="positionDao" class="com.crimetrack.jdbc.JdbcPositionDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>    

<!-- __________________________________________________________________________________________________ -->    

    <bean id="genderManager" class="com.crimetrack.service.GenderManager">
        <property name="genderDao" ref="genderDao"/>
    </bean>

    <bean id="genderDao" class="com.crimetrack.jdbc.JdbcGenderDAO" >
        <property name="dataSource" ref="dataSource" />
    </bean>

<!-- __________________________________________________________________________________________________ --> 

    <bean id="officerRegistrationValidation" class="com.crimetrack.service.OfficerRegistrationValidation">

            <property name="validateUserNameManager" ref="validateUserNameManager"/>


    </bean>

    <bean id="validateUserNameManager" class="com.crimetrack.service.ValidateUserNameManager">
            <property name="officerDao" ref="officerDao"/>

    </bean>


    <bean id="officerDao" class="com.crimetrack.jdbc.JdbcOfficersDAO" >
            <property name="dataSource" ref="dataSource" />
    </bean>


<!-- __________________________________________________________________________________________________ --> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource"><ref bean="dataSource" /></property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    </bean>
<!-- __________________________________________________________________________________________________ -->    

    <bean id="propertyConfigurer" 
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>
<!-- __________________________________________________________________________________________________ -->    

    <bean id="transactionManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>





  </beans>
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.0.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                           http://www.springframework.org/schema/beans/spring-context-3.0.xsd">


<!-- __________________________________________________________________________________________________ -->    

     <!-- Supports annotations and allows the use of @Controller, @Required, @RequestMapping -->
    <context:annotation-config/>    

    <context:component-scan base-package="com.crimetrack.jdbc"/>
    <context:component-scan base-package="com.crimetrack.service"/>
    <context:component-scan base-package="com.crimetrack.web" />

    <mvc:annotation-driven />

类路径:jdbc.properties
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:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xmlns:context="http://www.springframework.org/schema/context"

         xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 



<!-- __________________________________________________________________________________________________ -->              

    <bean id="countryManager" class="com.crimetrack.service.CountryManager">
        <property name="countryDao" ref="countryDao"/>
    </bean>
    <bean id="countryDao" class="com.crimetrack.jdbc.JdbcCountryDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!-- __________________________________________________________________________________________________ -->

    <bean id="authenticationManager" class="com.crimetrack.service.AuthenticationManager">
        <property name="loginDao" ref="loginDao" /> 
    </bean>    
    <bean id="loginDao" class="com.crimetrack.jdbc.JdbcLoginDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>
<!-- __________________________________________________________________________________________________ -->  

    <bean id="divisionManager" class="com.crimetrack.service.DivisionManager">
        <property name="divisionDao" ref="divisionDao"/>
    </bean>    
    <bean id="divisionDao" class="com.crimetrack.jdbc.JdbcDivisionDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!-- __________________________________________________________________________________________________ -->    

     <bean id="positionManager" class="com.crimetrack.service.PositionManager">
        <property name="positionDao" ref="positionDao"/>
    </bean>    
    <bean id="positionDao" class="com.crimetrack.jdbc.JdbcPositionDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>    

<!-- __________________________________________________________________________________________________ -->    

    <bean id="genderManager" class="com.crimetrack.service.GenderManager">
        <property name="genderDao" ref="genderDao"/>
    </bean>

    <bean id="genderDao" class="com.crimetrack.jdbc.JdbcGenderDAO" >
        <property name="dataSource" ref="dataSource" />
    </bean>

<!-- __________________________________________________________________________________________________ --> 

    <bean id="officerRegistrationValidation" class="com.crimetrack.service.OfficerRegistrationValidation">

            <property name="validateUserNameManager" ref="validateUserNameManager"/>


    </bean>

    <bean id="validateUserNameManager" class="com.crimetrack.service.ValidateUserNameManager">
            <property name="officerDao" ref="officerDao"/>

    </bean>


    <bean id="officerDao" class="com.crimetrack.jdbc.JdbcOfficersDAO" >
            <property name="dataSource" ref="dataSource" />
    </bean>


<!-- __________________________________________________________________________________________________ --> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource"><ref bean="dataSource" /></property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    </bean>
<!-- __________________________________________________________________________________________________ -->    

    <bean id="propertyConfigurer" 
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>
<!-- __________________________________________________________________________________________________ -->    

    <bean id="transactionManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>





  </beans>
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.0.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                           http://www.springframework.org/schema/beans/spring-context-3.0.xsd">


<!-- __________________________________________________________________________________________________ -->    

     <!-- Supports annotations and allows the use of @Controller, @Required, @RequestMapping -->
    <context:annotation-config/>    

    <context:component-scan base-package="com.crimetrack.jdbc"/>
    <context:component-scan base-package="com.crimetrack.service"/>
    <context:component-scan base-package="com.crimetrack.web" />

    <mvc:annotation-driven />

错误是没有数据源或jdbcTemplate连接到JdbcCountryDao bean:

java.lang.IllegalArgumentException:“数据源”或“jdbcTemplate”是必需的

但是,您的XML配置显示您已发送数据源,因此您确定在使用文件的发布版本时会发生此错误吗


另外,不需要在扩展
JdbcDaoSupport
的类中声明
@Autowired jdbcTemplate
,因为超类已经为您提供了它。

确保
applicationContext.xml
定义了bean
dataSource

DAO应该传递构造函数arg,而不是属性,因为
dataSource
是构造函数arg

注释构造函数方法并确保它接受
数据源

数据源传递与
applicationContext.xml
中定义的相同:

 <bean id="countryDao" class="com.crimetrack.jdbc.JdbcCountryDAO">
     <constructor-arg index="0" ref="dataSource"/>
 </bean>

@Repository
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO {
    private final Logger logger = Logger.getLogger(getClass());

    @Autowired
    JdbcCountryDAO(DataSource dataSource) {
        setDataSource(dataSource);
    }

    public List<Country> getCountryList() { 
    // ...

@存储库
公共类JdbcCountryDAO扩展JDBCDAO支持实现CountryDAO{
私有最终记录器=Logger.getLogger(getClass());
@自动连线
JdbcCountryDAO(数据源数据源){
setDataSource(数据源);
}
公共列表getCountryList(){
// ...

我是否需要创建一个数据源类,然后从JdbcCountryDao执行@AutowiredRemove
@AutowiredPrivate JdbcTemplate JdbcTemplate;
。我现在得到:org.springframework.beans.factory.BeanCreationException:创建文件中定义的名为“JdbcCountryDao”的bean时出错[C:\Users\Darin\apache-tomcat-6.0\webapps\crimeTrack\WEB-INF\classes\com\crimeTrack\jdbc\JdbcCountryDAO.class]:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:“需要dataSource”或“jdbcTemplate…”java.lang.IllegalArgumentException:“dataSource”或“jdbcTemplate”是必需的。我不认为您在我的第一个答案中回答了问题-您确定在使用发布的th版本时会发生此错误吗e文件?是的,每次我更改部署到服务器时,它都会出现在发布的版本上,如果你问的是这个问题的话。谢谢你,在谷歌搜索了几个小时后就解决了。很高兴知道这对你有帮助:)