2016-04-07 13 views
0

ich eine Frage getroffen, ich versuche Projekt bis zur Inbetriebnahme, bu esFederverschluß nicht @Autowired Kann dao

Dies sind gescheitert ist meine Konfiguration, dao und Service, jemand kann mir sagen, warum, thx viel

Dies ist DataBaseConfiguration:

@Configuration 
@EnableTransactionManagement 
public class DataBaseConfiguration implements EnvironmentAware { 

    private RelaxedPropertyResolver propertyResolver; 

    private static Logger log = LoggerFactory.getLogger(DataBaseConfiguration.class); 

    @Override 
    public void setEnvironment(Environment env) { 
     this.propertyResolver = new RelaxedPropertyResolver(env, "dataSource."); 
    } 

    @Bean(destroyMethod = "close") 
    public DataSource dataSource() { 
     log.debug("Configuring DataSource"); 

     DruidDataSource druidDataSource = new DruidDataSource(); 
     druidDataSource.setUrl(propertyResolver.getProperty("url")); 
     druidDataSource.setDriverClassName(propertyResolver.getProperty("driverClassName")); 
     druidDataSource.setUsername(propertyResolver.getProperty("username")); 
     druidDataSource.setPassword(propertyResolver.getProperty("password")); 

     return druidDataSource; 
    } 
} 

Dies ist MybatisConfiguration:

@Configuration 
    @ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class}) 
    @AutoConfigureAfter({ DataBaseConfiguration.class }) 
    @MapperScan("com.future.api.**.dao") 
    public class MybatisConfiguration implements EnvironmentAware { 

     private static Log logger = LogFactory.getLog(MybatisConfiguration.class); 

     private RelaxedPropertyResolver propertyResolver; 

     @Autowired 
     private DataSource dataSource; 

     @Override 
     public void setEnvironment(Environment env) { 
      this.propertyResolver = new RelaxedPropertyResolver(env, "mybatis."); 
     } 

     @Bean 
     @ConditionalOnMissingBean 
     public SqlSessionFactory sqlSessionFactory() { 
      try { 
       SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
       sessionFactory.setDataSource(dataSource); 
       sessionFactory.setTypeAliasesPackage(propertyResolver 
         .getProperty("typeAliasesPackage")); 
       sessionFactory 
         .setMapperLocations(new PathMatchingResourcePatternResolver() 
           .getResources(propertyResolver 
             .getProperty("mapperLocations"))); 
       sessionFactory 
         .setConfigLocation(new DefaultResourceLoader() 
           .getResource(propertyResolver 
             .getProperty("configLocation"))); 
       return sessionFactory.getObject(); 
      } catch (Exception e) { 
       logger.warn("Could not configure mybatis session factory"); 
       return null; 
      } 
     } 

     @Bean 
     @ConditionalOnMissingBean 
     public DataSourceTransactionManager transactionManager() { 
      return new DataSourceTransactionManager(dataSource); 
     } 
    } 

T ies ist dao

public interface UserMapper extends BaseDao<User,UserCriteria ,String> { 
     @SelectProvider(type=UserSqlProvider.class, method="countByExample") 
     int countByExample(UserCriteria example); 

     @DeleteProvider(type=UserSqlProvider.class, method="deleteByExample") 
     int deleteByExample(UserCriteria example); 

     @Delete({ 
      "delete from t_user", 
      "where id = #{id,jdbcType=VARCHAR}" 
     }) 
     int deleteByPrimaryKey(String id); 

     @Insert({ 
      "insert into t_user (id, username, ", 
      "password, created_by, ", 
      "created_date, last_modified_by, ", 
      "last_modified_date)", 
      "values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, ", 
      "#{password,jdbcType=VARCHAR}, #{createdBy,jdbcType=VARCHAR}, ", 
      "#{createdDate,jdbcType=DATE}, #{lastModifiedBy,jdbcType=VARCHAR}, ", 
      "#{lastModifiedDate,jdbcType=DATE})" 
     }) 
     int insert(User record); 
    } 

Dieser Service ist

@Service 
@Transactional 
public class UserServiceImp extends BaseServiceImpl<User,UserCriteria> implements UserService { 

    @Autowired 
    private UserMapper userDao; 

    @Override 
    protected BaseDao<User, UserCriteria, String> getDao() { 
     return userDao; 
    } 
} 

Dieser Fehler Info

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.future.api.user.dao.UserMapper com.future.api.user.service.imp.UserServiceImp.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.future.api.user.dao.UserMapper] 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:573) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    ... 22 common frames omitted 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.future.api.user.dao.UserMapper] 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:1373) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    ... 24 common frames omitted 
+0

so Code hinzugefügt. –

+0

Bitte entfernen Sie die Bilder und fügen Sie die * full * Stack-Trace nicht nur ein Snippet. Und für den Anfang schlage ich vor, Sie entfernen Ihre Config-Klassen und verwenden Sie die Spring Boot bereitgestellten Datenquelle (warum fügen Sie eine weitere Ebene der Komplexität) und verwenden Sie die mybatis Spring Boot Starter, anstatt zu versuchen, Ihre eigenen zu rollen. –

+0

Sorry, ich verstehe nicht, was du meinst ... –

Antwort

0

ich Ihr Problem glauben, dass diese Anmerkung sein kann:

@MapperScan("com.future.api.**.dao") 

Ich habe nicht vorher gesehen (sowohl im Code als auch in der Dokumentation)) dass es möglich wäre, Platzhalter zu verwenden. Verwenden Sie den genauen Paketnamen.

Ich glaube, dass es auch Unterpakete scannt, also möchten Sie vielleicht die Paketstruktur ändern, um alle DAOs in der Struktur unter einem Paket zu haben.

+0

Nein, ich habe viele Module unter API, Wenn ich genaue Paketnamen verwenden, können die anderen nicht gescannt werden –

+0

Ich aktualisierte meine Antwort. Eine andere Option wäre, Wildcard-Feature zum mybatis-spring-Projekt beizutragen :). Aber Sie müssten zuerst mit den Betreuern sprechen, wenn sie das wollen. – luboskrnac

+0

Guter Vorschlag, und ich löse das Problem. Es wird von EntityManage.class in MybatisConfiguration verursacht, aber ich weiß nicht warum. Danke nochmal :) –

Verwandte Themen