Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 为什么在尝试连接到多个数据库时会出现SpringJDBCTemplate问题?_Java_Spring_Spring Mvc_Spring Boot_Spring Jdbc - Fatal编程技术网

Java 为什么在尝试连接到多个数据库时会出现SpringJDBCTemplate问题?

Java 为什么在尝试连接到多个数据库时会出现SpringJDBCTemplate问题?,java,spring,spring-mvc,spring-boot,spring-jdbc,Java,Spring,Spring Mvc,Spring Boot,Spring Jdbc,这是我的错误,我要连接多个mysql数据库。对于一分贝,它是完美的工作。然后我尝试了2分贝,但是我得到了一个错误。请帮我解决这个问题。 似乎我对多个DB的更改是错误的:-\ 错误 ec 10, 2015 10:23:06 PM org.springframework.web.context.support.AnnotationConfigWebApplicationContext loadBeanDefinitions INFO: Found 4 annotated classes in

这是我的错误,我要连接多个mysql数据库。对于一分贝,它是完美的工作。然后我尝试了2分贝,但是我得到了一个错误。请帮我解决这个问题。 似乎我对多个DB的更改是错误的:-\

错误

    ec 10, 2015 10:23:06 PM org.springframework.web.context.support.AnnotationConfigWebApplicationContext loadBeanDefinitions
INFO: Found 4 annotated classes in package [net.codejava.spring]
Dec 10, 2015 10:23:07 PM org.springframework.web.servlet.DispatcherServlet initServletBean
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.codejava.spring.dao.ContactDAO net.codejava.spring.controller.HomeController.contactDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.codejava.spring.dao.ContactDAO net.codejava.spring.controller.HomeController.contactDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103)

Dec 10, 2015 10:23:07 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.codejava.spring.dao.ContactDAO net.codejava.spring.controller.HomeController.contactDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.codejava.spring.dao.ContactDAO net.codejava.spring.controller.HomeController.contactDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963)

Dec 10, 2015 10:23:07 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /SpringMvcJdbcTemplate threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [net.codejava.spring.dao.ContactDAO] 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)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963)
这是我的控制器类

@控制器 公共类家庭控制器{

@Autowired
private ContactDAO contactDAO;

@Autowired
private ContactDAO2 contactDAO2;

@RequestMapping(value = "/")
public ModelAndView listContact(ModelAndView model) throws IOException {
    List<Contact> listContact = contactDAO.list();
    model.addObject("listContact", listContact);
    model.setViewName("home");

    return model;
}
这是我的刀课#02

这是我的DAOImpl课程

public class ContactDAO2Impl implements ContactDAO2 {

    @Autowired 
    @Qualifier("jdbcItems") 
    private JdbcTemplate jdbcTemplate;

    public ContactDAO2Impl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public void saveOrUpdate(Contact contact) {
        if (contact.getId() > 0) {
            // update
            String sql = "UPDATE contact SET name=?, email=?, address=?, "
                        + "telephone=? WHERE contact_id=?";
            jdbcTemplate.update(sql, contact.getName(), contact.getEmail(),
                    contact.getAddress(), contact.getTelephone(), contact.getId());
        }
这是我的另一个DAOImpl类

public class ContactDAOImpl implements ContactDAO {

    @Autowired 
    @Qualifier("jdbcUsers") 
    private JdbcTemplate jdbcTemplate;

    public ContactDAOImpl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public void saveOrUpdate(Contact contact) {
        if (contact.getId() > 0) {
            // update
            String sql = "UPDATE contact SET name=?, email=?, address=?, "
                        + "telephone=? WHERE contact_id=?";
            jdbcTemplate.update(sql, contact.getName(), contact.getEmail(),
                    contact.getAddress(), contact.getTelephone(), contact.getId());
        } 
下面显示了我的配置类 config#01

    @Configuration
    @ComponentScan(basePackages="net.codejava.spring")
    @EnableWebMvc
    public class MvcConfiguration extends WebMvcConfigurerAdapter{

        @Bean
        public ViewResolver getViewResolver(){
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/");
            resolver.setSuffix(".jsp");
            return resolver;
        }

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
        }


    }
config#02

@Configuration
public class DatabaseItemsConfig {

    @Bean(name = "jdbcItems")
    public JdbcTemplate jdbcTemplate(DataSource dsItems) {
        return new JdbcTemplate(dsItems);
    }

    @Bean(name = "dsItems")
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("321");
        return dataSource;
    }

}
config#03

    @Configuration
public class DatabaseUsersConfig {


    @Bean(name = "jdbcUsers") 
    public JdbcTemplate jdbcTemplate(DataSource dsUsers) {
        return new JdbcTemplate(dsUsers);
    }

    @Bean(name = "dsUsers") 
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test2");
        dataSource.setUsername("root");
        dataSource.setPassword("321");
        return dataSource;
    }

}
编辑

整个项目上传的源代码


您的接线有很多问题..要解决这个问题:

移除(从ContactDAOImpl中)

和(来自ContactDAO2Impl)

然后替换

 public ContactDAO2Impl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }

替换

 public ContactDAOImpl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }


您的
jdbcUsers
bean是一个
DataSource
,而不是
JdbcTemplate
。亲爱的Kayaman.我更改了它。但是错误是sameWell,请阅读stacktrace的其余部分以找到根本原因(您只显示了它的一部分,它不包含实际错误)。还可以编辑代码以显示您是如何更改的。我根据数据库项配置类中的u say&swap bean name编辑了代码。您是否缺少
ContactDAO
类的
@组件
注释,或者您只是将其从发布中删除了?当我无法相信您发布的是co时,帮助您并不容易更正。我尝试了你的方法,但错误是一样的。我应该上传所有代码到主机吗?我只是做了一些修改…我犯了错误..尝试重新修复它好的,我现在会检查它,并在应用后尝试测试。上传了我的源代码:-)你上面的修改已应用。但错误是相同的。请直接修复并发送给我。tnx一个你可以加载固定代码
 @Autowired 
 @Qualifier("jdbcUsers") 
 @Autowired 
 @Qualifier("jdbcItems") 
 @Bean(name = "jdbcItems")
 public JdbcTemplate jdbcTemplate(DataSource dsItems) {
    return new JdbcTemplate(dsItems);
 }
 @Bean(name = "jdbcUsers") 
 public JdbcTemplate jdbcTemplate(DataSource dsUsers) {
    return new JdbcTemplate(dsUsers);
 }
 public ContactDAO2Impl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }
 public ContactDAO2Impl(@Qualifier("dsItems") DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }
 public ContactDAOImpl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }
 public ContactDAOImpl(@Qualifier("dsUsers") DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
 }