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

Tworzenie sesji - spring.

Object Storage Arubacloud
0 głosów
969 wizyt
pytanie zadane 23 czerwca 2018 w Java przez Aisekai Nałogowiec (42,190 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 Szeryf (79,280 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ź 168 wizyt
pytanie zadane 13 czerwca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 152 wizyt
+1 głos
2 odpowiedzi 132 wizyt
pytanie zadane 31 marca 2022 w PHP przez NoteDS Użytkownik (560 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...