2016-04-14 39 views
0

Bir TestController scoped oturumum var. MyEvent kullanıyor.Spring Boot içindeki Olay Dinleyicileri

@Controller 
@Scope("session") 
@RequestMapping(value = "/test") 
@Slf4j 
public class TestController { 

    private String phone = getPhone(); 

    private String getPhone() { 
     String phone = RandomGenerator.generateNumeric(4); 
     log.info("Phone is: {}", phone); 
     return phone; 
    } 

    @EventListener 
    public void listen(MyEvent event) { 
     log.info("Event in {} ({})", this, RandomGenerator.generateNumeric()); 
    } 

} 

Ama olay yayımlamak zaman, TestController sınıfının örnekleri tek bu alıyorsanız. Ama ben tüm durumlarda bir olayı ele almak istiyorum. Bana yardım eder misin?

+1

Neyin her örneği? Oturumun kapsamını sordunuz, böylece mevcut oturum için etkinliği yayınlayacak .... –

cevap

1

'u @Scope("session") ile bildiriyorsunuz, böylece her oturum için yeni bir denetleyici çekirdeği aldınız. Daha sonra, kodun açıklanmayan bir bölümünde bir olay yayınlarsınız, bu nedenle diğer denetleyiciler diğer oturumlarda olduğundan, yalnızca yayıncı ile aynı oturum içindeki denetleyicilerin olayı alması makul olur.

Bu nedenle, oturum başına bir denetleyicisi olmadığından, olay kez tüketilen okunur. Çözüm, session kapsamını singleton (varsayılan) olarak değiştirmek ve denetleyicide (bu telefon numarası) durumu saklamamaktır.