Java 为什么在尝试连接到多个数据库时会出现SpringJDBCTemplate问题?
这是我的错误,我要连接多个mysql数据库。对于一分贝,它是完美的工作。然后我尝试了2分贝,但是我得到了一个错误。请帮我解决这个问题。 似乎我对多个DB的更改是错误的:-\ 错误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
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);
}