Configurando uma Aplicação Spring Boot com Integrações de Framework

Para configurar o ambiente de negócios com os frameworks Spring e SpringMVC dentro de uma aplicação Spring Boot, é necessário ativar a varredura de componentes. Adicione a anotação @ComponentScan à classe principal da aplicação.

package com.exemplo.sistema;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan(basePackages = "com.exemplo")
@SpringBootApplication
public class AplicacaoSistema {

    public static void main(String[] args) {
        SpringApplication.run(AplicacaoSistema.class, args);
    }
}

Por padrão, a varredura ocorre no pacote da classe anotada e seus subpacotes. Para incluir pacotes adicionais, a anotação @ComponentScan é necessária.

Crie um controlador REST básico para testar a integração.

package com.exemplo.sistema.controlador;

import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/info")
    public Map<String, Object> obterInfo() {
        Map<String, Object> dados = new HashMap<>();
        dados.put("nome", "Servidor de Dados");
        dados.put("versao", "2.0");
        return dados;
    }
}

Ao executar a aplicação, a requisição a http://localhost:8080/info retornará o JSON correspondente.

Integração com MyBatis

Para integrar o MyBatis, é necessário adicionar as dependências corretas ao projeto, incluindo um conector de banco de dados e um pool de conexões de alta performance como o Druid.

<!-- trecho do pom.xml -->
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.0</version>
    </dependency>
</dependencies>

Configure a fonte de dados e o MyBatis no arquivo application.yml.

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/meubanco
    username: usuario
    password: senha
    type: com.alibaba.druid.pool.DruidDataSource

mybatis:
  mapper-locations: classpath*:mappers/*.xml
  type-aliases-package: com.exemplo.sistema.modelo

Na classe principal, habilite a varredura de interfaces DAO e o gerenciamento de transações.

@SpringBootApplication
@MapperScan("com.exemplo.sistema.repositorio")
@EnableTransactionManagement
public class AplicacaoSistema { ... }

Defina a interface do DAO e a classe de modelo.

package com.exemplo.sistema.repositorio;

import com.exemplo.sistema.modelo.Usuario;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

public interface UsuarioDao {

    @Select("SELECT * FROM usuarios WHERE id = #{id}")
    Usuario buscarPorId(@Param("id") Long id);
}

// Classe Modelo
package com.exemplo.sistema.modelo;

public class Usuario {
    private Long id;
    private String nome;
    private String email;
    // Getters e Setters
}

Use a anotação @Transactional para gerenciar transações nos serviços.

@Service
public class UsuarioService {

    private final UsuarioDao usuarioDao;

    public UsuarioService(UsuarioDao usuarioDao) {
        this.usuarioDao = usuarioDao;
    }

    @Transactional(readOnly = true)
    public Usuario obterUsuario(Long id) {
        return usuarioDao.buscarPorId(id);
    }
}

Perfil de Aplicação para Diferentes Ambientes

Para configurar portas diferentes para desenvolvimento, teste e produção, utilize o recurso de Profiles do Spring Boot. Crie arquivos como application-dev.yml e application-prod.yml. Ative o perfil desejado na configuração principal ou via argumento de linha de comando: java -jar aplicacao.jar --spring.profiles.active=prod.

Template com FreeMarker

Adicione a dependência do FreeMarker ao projeto.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

Configure as opções do template no application.yml.

spring:
  freemarker:
    suffix: .ftl
    template-loader-path: classpath:/templates/
    charset: UTF-8
    content-type: text/html

Crie um arquivo de template em src/main/resources/templates/home.ftl.


<html>
<head>
    <title>Página Inicial</title>
</head>
<body>
    <h1>Bem-vindo ao Sistema!</h1>
</body>
</html>

No controlador, retorne o nome do template.

@Controller
public class WebController {

    @GetMapping("/")
    public String paginaInicial() {
        return "home"; // Renderiza home.ftl
    }
}

Hot Deploy em Desenvolvimento

Para habilitar a atualização automática durante o desenvolvimento, adicione a dependência spring-boot-devtools com o escopo opcional.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

Configuração de Cluster com Nginx

Ao deployar atrás de um proxy reverso como Nginx, configure a aplicação para entender os cabeçalhos de proxy.

# application.yml
server:
  forward-headers-strategy: native

Para compartilhamento de sessão em cluster, use o Redis com Spring Session.

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

# application.yml
spring:
  session:
    store-type: redis
  redis:
    host: localhost
    port: 6379

Objetos armazenados na sessão devem implementar java.io.Serializable.

Monitoramento com Actuator

Adicione a dependência do Actuator para endpoints de saúde e informações.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Configure o endpoint de gerenciamento e exponha informações do projeto.

# application.yml
management:
  server:
    port: 9090
  endpoints:
    web:
      exposure:
        include: health, info

info:
  app:
    name: Meu Sistema
    description: Aplicação de gerenciamento de dados

Acesse http://localhost:9090/actuator/health para verificar o status e http://localhost:9090/actuator/info para os detalhes configurados.

Tags: spring-boot MyBatis FreeMarker spring-session Redis

Publicado em 6-5 18:26 por Thomas