• 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
103 wizyt
pytanie zadane 23 czerwca w Java przez Aisekai Nałogowiec (29,230 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 przez mbabane Maniak (57,120 p.)
wybrane 25 czerwca 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
0 odpowiedzi 25 wizyt
pytanie zadane 28 listopada w Java przez Morthan Początkujący (370 p.)
0 głosów
1 odpowiedź 64 wizyt
0 głosów
0 odpowiedzi 94 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

57,461 zapytań

102,437 odpowiedzi

211,313 komentarzy

29,243 pasjonatów

Przeglądających: 391
Pasjonatów: 27 Gości: 364

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.

...