Arquitetura de Extensibilidade: Desenvolvendo um Starter Personalizado para MyBatis no Spring Boot

Abstração de Componentes Compartilhados

Em ambientes corporativos complexos, é frequente a necessidade de padronizar o acesso ao banco de dados entre múltiplos microsserviços. A melhor prática recomendada pelo ecossistema Spring Boot para este fim é a criação de uma biblioteca personalizada do tipo Starter. Isso permite encapsular configurações repetitivas de persistência, facilitando a manutenção e garantindo consistência técnica.

Estrutura Modular do Projeto

O desenvolvimento exige a divisão clara de responsabilidades. Precisamos estabelecer dois módulos distintos no nosso gerenciador de dependências:

  • Módulo de Automação (Autoconfigure): Contém a lógica pura de configuração das beans e as regras de ativação.
  • Módulo de Entrada (Starter): Funciona como um agregador de dependências, expondo apenas a API necessária para os projetos consumidores.

Implementação da Lógica de Configuração

Dentro do módulo responsável pela automação (autoconfigure), devemos criar a classe central que registrará os componentes de MyBatis. Utilizaremos anotações padrão do framework Spring para habilitar a detecção automática.

@Configuration
@AutoConfiguration
public class GerenciamentoMybatisAutomatico {

    /**
     * Define o bean necessário para gerenciar sessões de SQL com o banco de dados.
     */
    @Bean
    public SqlSessionFactoryBean instanciarFabricaSessoes(@Autowired DataSource fonteDeDados) {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBean();
        
        // Vincula a conexão configurada ao gerenciador de sessões
        builder.setDataSource(fonteDeDados);
        
        return builder;
    }

    /**
     * Responsável por varrer o código fonte em busca de interfaces mapeadoras.
     */
    @Bean
    public MapperScannerConfigurer definirConfiguradorDeMapeamento(BeanFactory factory) {
        MapperScannerConfigurer scanner = new MapperScannerConfigurer();
        
        // Identifica dinamicamente o pacote base através do contexto do Spring
        List<string> pacotesContextuais = AutoConfigurationPackages.get(factory);
        if (!pacotesContextuais.isEmpty()) {
            scanner.setBasePackage(pacotesContextuais.get(0));
        }

        // Especifica qual anotação deve ser buscada nos arquivos de interface
        scanner.setAnnotationClass(Mapper.class);
        
        return scanner;
    }
}</string>

Registro de Ativação Automática

Para que o Spring Boot reconheça essa classe durante a inicialização do aplicativo, é obrigatório registrar seu nome totalmente qualificado no arquivo de importação automático. O caminho padrão na estrutura de recursos deve seguir a hierarquia abaixo:

  • src/main/resources/META-INF/spring/
  • Arquivo alvo: org.springframework.boot.autoconfigure.AutoConfiguration.imports

No conteúdo deste arquivo, insira simplesmente o nome completo da classe de configuração desenvolvida anteriormente, um por linha.

Criação do Módulo Agregador

O módulo final destinado à distribuição (starter) não deve conter lógica complexa. Sua função principal reside no gerenciamento do arquivo pom.xml, onde deve-se declarar a dependência interna sobre o módulo de automação criado no passo anterior. Isso permite que os desenvolvedores externos consumam apenas o artefato do starter sem expor detalhes internos de implementação.

Ajuste de Compatibilidade de Compilação

Ao utilizar versões modernas do JDK (como o Java 17 ou superior), pode ocorrer divergência nas configurações padrão do Maven. Para garantir que os artefatos sejam compilados corretamente e evitem erros de versão incompatível, atualize a seção de plugins de construção em ambos os arquivos pom.xml dos módulos:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

Substituição de Dependências Externas

Uma vez que o artefato personalizado seja publicado no repositório local ou remoto, os projetos aplicacionais devem remover as bibliotecas oficiais do MyBatis Spring Boot e substituí-las pela nova dependência criadora do starter proprietário. Isso garante que todas as regras de negócio e padrões de persistência definidos internamente sejam aplicados uniformemente.

Tags: spring-boot MyBatis maven jdk17 Spring-Framework

Publicado em 9-16 21:31