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);
}
}