2015-03-02 89 views
0

我正在构建使用spring-boot版本1.2.1.RELEASE,spring-securityspring-data-mongodbhibernate-validator的应用程序。MongoDB导致IllegalStateException的弹簧启动

我有以下Document

@Document 
public class User { 

    @Id 
    private String id; 

    @NotEmpty(message = "username is required") 
    private String username; 

    @NotEmpty(message = "password is required") 
    private String password; 

    @Email(regexp = "[email protected]+\\..+", message = "email address is invalid") 
    private String email; 

    public User() { 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 

其仓库

public interface UserRepository extends MongoRepository<User, String> { 
    User findOneByUsernameIgnoreCase(String username); 
} 

服务

@Service 
public class UserService { 

    @Autowired 
    UserRepository repository; 

    public User authenticate(String username) { 
     return repository.findOneByUsernameIgnoreCase(username); 
    } 
} 

自定义的UserDetailsS​​ervice

@Service 
public class UserDetailsServiceImpl implements UserDetailsService { 

    @Autowired 
    UserService service; 

    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     User user = service.authenticate(username); 

     if (user == null) { throw new UsernameNotFoundException("invalid username"); } 

     return new org.springframework.security.core.userdetails.User(
       username, user.getPassword(), 
       commaSeparatedStringToAuthorityList("ROLE_USER") 
     ); 
    } 
} 

最后分配UserServiceDetails

@Order(HIGHEST_PRECEDENCE) 
    @Configuration 
    protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter { 

     @Autowired 
     private UserDetailsService userDetailsService; 

     @Override 
     public void configure(AuthenticationManagerBuilder auth) throws Exception { 
      auth.userDetailsService(userDetailsService); 
     } 
    } 

在启动应用程序时出现以下错误

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalStateException: ApplicationEventMulticaster not  initialized - call 'refresh' before multicasting events via the context: org.springframework.boot[email protected]6022f5dd: startup date [Mon Mar 02 17:32:08 SGT 2015]; root of context  hierarchy 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) 
    ... 135 more 
Caused by: java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded. [email protected]: startup date [Mon Mar 02 17:32:08 SGT 2015]; root of context hierarchy 
    at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:344) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331) 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:307) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:181) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:141) 
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:67) 
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getEntityInformation(MongoRepositoryFactory.java:141) 
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:83) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:177) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225) 
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean.afterPropertiesSet(MongoRepositoryFactoryBean.java:108) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562) 
    ... 145 more 

据我所知,它是由UserRepository引起的,但我无法弄清楚它的原因。

回答

2

这是通过升级到弹簧引导1.2.2.RELEASE修复的。