• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie sesji - spring.

0 głosów
132 wizyt
pytanie zadane 23 czerwca 2018 w Java przez Aisekai Nałogowiec (31,570 p.)

Staram się napisać symulator giełdy kryptowalut. Problem pojawił się w chwili, gdy chcę zaimplementować dodawanie ofert. Pierwszą myślą jak to zrobić, jest zrobienie z Usera zmiennej sesyjnej i dodawanie do Listy ofert Jsona przez RequestBody. Więc odpaliłem tutorial z:

https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-jdbc.html#httpsession-jdbc-boot-sample

i robiłem krok po kroku co jest tam opisane. Gdy pierwszy raz skompilowałem program, dostałem wyjątek: 

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'database.spring_session' doesn't exist

Utworzyłem  ręcznie tablice Spring_Session (jako @Entity z polem Id i expiryTime).Czy jest to poprawne? Czy jest to dobry sposób na rozwiązanie problemu? Jeżeli tak, to czy teraz w tej Encji mam dodać Usera? Jak potem wydobyć z sesji "tego specyficznego usera"? Jeżeli coś to pomoże, to korzystam z MySql.

Drugie pytanie: czym są te atrybuty schema i initialize-schema? Jeżeli dobrze myślę, to te atrybuty odpowiadają za to, jeśli bym chciał zrobić z aplikacji aplikację stand-alone i byłyby one wykorzystywane jako baza danych tak? Co w przypadku, kiedy chcę zapisywać dane lokalnie u siebie? Jakie wartości te atrybuty powinny mieć.

Jeżeli komuś coś to pomoże, to tutaj link do repo: https://github.com/KamLar/market-simulator

1 odpowiedź

+1 głos
odpowiedź 24 czerwca 2018 przez mbabane Maniak (63,760 p.)
wybrane 25 czerwca 2018 przez Aisekai
 
Najlepsza

Zawsze możesz stworzyć komponent o zasięgu sesji:

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class SessionScopeComponent
{
    private List<String> offers = new ArrayList<>();

    public void addOffer(String offer)
    {
        offers.add(offer);
    }

    public List<String> getOffers()
    {
        return offers;
    }

    public void setOffers(List<String> offers)
    {
        this.offers = offers;
    }
}

Przykładowy endpoint:

@Controller
public class Controller
{
    private SessionScopeComponent sessionScopeComponent;

    @Autowired
    public Controller(SessionScopeComponent sessionScopeComponent)
    {
        this.sessionScopeComponent = sessionScopeComponent;
    }

    @PutMapping("/offer/{offer}")
    public ResponseEntity<String> addOffer(@PathVariable String offer)
    {
        sessionScopeComponent.addOffer(offer);
        System.out.println(sessionScopeComponent.getOffers());

        return ResponseEntity.ok("Dodano");
    }
}

Przykładowy log serwera, gdzie wysyłam żądania z dwóch rożnych komputerów (czyli dwie osobne sesje; najpierw 3 żądania z jednego komputera, a następnie 3 z drugiego):

[s]
[s, offer2]
[s, offer2, offer3]
[offer1]
[offer1, offer2]
[offer1, offer2, offer3]

 

Podobne pytania

0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 13 czerwca 2017 w Java przez Jonki Dyskutant (8,220 p.)
0 głosów
1 odpowiedź 74 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

60,275 zapytań

105,972 odpowiedzi

220,188 komentarzy

32,477 pasjonatów

Przeglądających: 212
Pasjonatów: 5 Gości: 207

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...