Home java How to remake Scheduler for Vaadin 14 (Spring Boot and Vaadin 14)

How to remake Scheduler for Vaadin 14 (Spring Boot and Vaadin 14)

Author

Date

Category

Hello, I wrote a chat, where I was told to make a timer that would call every second to call a feature (API / Unread) from the Restservice.
I previously created the TimerConfig class. He worked, but told me to remove him and redid so that was in the class MainView

Public Class TimerConfig {
// Timer causes every second method for downloading messages from database
  @Autowired
  MessageServiceImpl MessageService;
  @Bean.
  Public Timertask Timer () {
    Timertask Timertask = New Timertask () {
      @Override
      Public void Run () {
        MessageService.GetallMessages ();
      }
    };
    Timer Timer = New Timer ();
    Timer.Schedule (Timertask, 1000, 1000);
    Return Timertask;
  }
}

Here is my MainView class, here should be (The @Scheduled Annotation in Spring) which should call every second (API / Unread)

stylesheet ("frontend: //styles/styles.css")
@Route.
@Pwa (name = "Vaadin MessagesInfomanager", shortName = "Vaadin MessagesInfomanager")
@Push.
@Enablescheduling
Public Class MainView EXTENDS VERTICALLAYOUT {
  Private Final MessagesInfomanager MessagesInfomanager;
  Private Final RestService RestService;
  Private String Username;
  @Autowired
  Public MainView (RestService Restservice) {
    this.messagesInfomanager = MessageConfigurator.getInstance (). GetChatmessagesInfomanager ();
    AddClassName ("Main-View");
    setsizefull ();
    SETDEFAULTHORIZONTALCOMPONENTALIGNMENT (ALIGNMENT.CENTER);
    H1 Header = New H1 ("Vaadin Chat");
    Header.getelement (). GetThemeList (). Add ("Dark");
    Add (Header);
    AskUserName ();
    this.RestService = restservice;
  }
  Private Void AskUserName () {
    HorizontalAlyout Layout = New horizontalAlyout ();
    TextField usernamefield = new textfield ();
    Button StartButton = New Button ("Start Chat");
    layout.add (UserNamefield, StartButton);
    StartButton.addClicklistener (Click - & gt; {
      username = usernamefield.getvalue ();
      Remove (Layout);
      Showchat (UserName);
    });
    Add (Layout);
  }
  Private Void Showchat (String Username) {
    MessageList Messagelist = New Messagelist ();
    List & LT; Message & GT; lasts = restservice.getlast ();
    For (Message Message: Lasts) {
      Messagelist.Add (New Paragraph (Message.getFrom () + ":" + Message.getMessage ()));
    }
    Add (Messagelist, CreateInputLayout (UserName, Messagelist));
    Expand (Messagelist);
  }
  Private Component CreateInPutLayout (String Username, Messagelist Messagelist) {
    HorizontalAlyout Layout = New horizontalAlyout ();
    layout.setwidth ("100%");
    TextField Messagefield = New TextField ();
    messagefield.addkeydownlistener (key.enter, keydownevent - & gt; Sender (Messagefield, Messagelist));
    Button SendButton = New Button ("Send");
    sendbutton.addthemevariants (buttonvariant.lumo_primary);
    layout.add (Messagefield, SendButton);
    Layout.Expand (Messagefield);
    Messagefield.addFocusListener (Event - & gt; {
      For (Message Message: MessagesInfomanager.getMessagesByui (getui ())) {
        if (! message.getfrom (). Equals (UserName)) {
          Message.SetUnread (False);
          this.restservice.updateMessage (Message.getID (), Message);
        }
      }
    });
    SendButton.addClicklistener (Click - & GT; Sender (Messagefield, Messagelist));
    Messagefield.Focus ();
    RETURN LAYOUT;
  }
  Private Void Sender (Textfield Textfield, Messagelist Messagelist) {
    Message Message = New Message (UserName, TextField.GetValue ());
    Message = Restservice.SaveMessage (Message);
    MessagesInfomanager.UpdateMessageUIInfo (New MessageInfo (Messagelist, Message, This));
    TextField.Clear ();
    textfield.focus ();
  }
}

But my restcontroller

Public Class RESTCONTROLLER {
  @Autowired
  Timertask Timertask;
  @Resource
  Private Final MessageService MessageService;
  Public RestController (MessageService MessageService) {
    this.MessageService = MessageService;
  }
  @GetMapping ("/ API / Unread")
  Public Void GetUnreadMessages () {
    // Here we call the timer itself
    timertask.run ();
  }

restservice

Public Class RestService {
  PRIVATE FINAL RESTTEMPLATE RESTTEMPLATE;
Public Restservice (ResttemplateBuilder RestTemplateEbuilder) {
  this.resttemplate = resttemplatebuilder.build ();
}
Public List & LT; Message & GT; GetUnreadMessages () {
  List & LT; Message & GT; List = New ArrayList & LT; & GT; ();
  String URL = "http: // Localhost: 8080 / API / SAVE";
  Return (List & LT; Message & GT;) RestTemplate.GetForentity (URL, Message []. Class);
}

For more familiarization with the project my githab
https://github.com/fallen3019/vaadin-chat


Answer 1, Authority 100%

Create a method in MainView, put an @scheduled annotation above it. For example, so:

@ scheduled (fixeddelay = 1000)
Public Void Reload () {
  MessageService.GetallMessages ();
  ...
}

More details you can see here https://www.baeldung.com/spring-scheduled-tasks

@ springbootapplication
@Enablescheduling
Public Class Application {
  Public Static Void Main (String [] Args) {
    SpringApplication.Run (Application.class);
  }
}

Programmers, Start Your Engines!

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

Recent questions