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.