3
respostas

Ativando serviço no springboot

Olá. Estou criando um sistema que simular um radar de transito. Esse sistema gera a cada 3 segundos uma multa com dados do veiculo e o instante da multa. A partir disso esse sistema consome uma API que popula um banco de dados. Portanto, são dois serviços distintos: o radar e a API. Eu gostaria de saber como fazer para que o radar fosse acionado e parado a partir de alguma ação do usuario. Atualmente o que ocorre é que ao subir a aplicação o radar já começa a gerar as multas. Estou usando o Scheduler para realizar esse intervalo de geração. Tentei fazer como está mostrado abaixo. Agradeço desde ja.

Serviço que gera os dados da infração Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Serviço que consome a API Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O controller. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu pretendo fazer esses Gets para acionar e parar o radar, mas não consegui fazer acontecer e estou meio perdido. Se algu

3 respostas

fiz algumas mudanças e a principio funcionou. Contudo não sei se fiz da melhor forma.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ao dispara a requisição pro endpoint STOP, o sistema lança a exception. Não sei se isso seria um bom caminho.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá Gibran, tudo bem?

Pelo que entendi, você está querendo implementar uma forma de acionar e parar o serviço que gera as multas do radar de trânsito, correto? Uma forma de fazer isso é utilizando uma variável de controle que seja alterada através de uma chamada HTTP.

Você pode criar um endpoint no seu controller que altere essa variável de controle para "true" ou "false", dependendo se você quer que o serviço esteja ativo ou não. Por exemplo:

private boolean radarAtivo = true;

@GetMapping("/radar/ativar")
public void ativarRadar() {
    radarAtivo = true;
}

@GetMapping("/radar/desativar")
public void desativarRadar() {
    radarAtivo = false;
}

Dessa forma, ao chamar a URL "/radar/ativar", a variável "radarAtivo" será alterada para "true", ativando o serviço que gera as multas. Ao chamar a URL "/radar/desativar", a variável será alterada para "false", desativando o serviço.

Então, no seu método que gera as multas, você pode adicionar uma verificação para saber se o serviço está ativo ou não, antes de gerar uma nova multa. Por exemplo:

@Scheduled(fixedDelay = 3000)
public void gerarMulta() {
    if (radarAtivo) {
        // gera a multa
    }
}

Dessa forma, o serviço só vai gerar uma nova multa se a variável "radarAtivo" estiver como "true".

Espero ter ajudado e bons estudos!

No caso do metodo anotado com @Scheduler, essa variavel radarAtivo nao é um parametro, então seria um atributo da classe onde o metodos está, certo?

Há aqui na plataforma algo conteudo sobre isso?