Spring Boot Support para jOOQ
1. Visão geral
Este tutorial é uma continuação do artigoIntroduction to jOOQ with Spring, cobrindo as maneiras como jOOQ pode ser usado em um aplicativo Spring Boot.
Se você não passou por esse tutorial, dê uma olhada nele e siga as instruções na seção 2 em Dependências do Maven e na seção 3 na geração de código. Isso irá gerar código-fonte para classes Java que representam tabelas no banco de dados de amostra, incluindoAuthor,BookeAuthorBook.
2. Configuração do Maven
Além das dependências e plugins, como no tutorial anterior, vários outros componentes precisam ser incluídos no arquivo Maven POM para fazer o jOOQ funcionar com o Spring Boot.
2.1. Gerenciamento de Dependências
A maneira mais comum de usar Spring Boot é herdar do projetospring-boot-starter-parent declarando-o no elementoparent. No entanto, esse método nem sempre é adequado, pois impõe uma cadeia de herança a seguir, que pode não ser o que os usuários desejam em muitos casos.
Este tutorial usa outra abordagem: delegar o gerenciamento de dependências ao Spring Boot. Para que isso aconteça, basta adicionar o seguinte elementodependencyManagement ao arquivo POM:
org.springframework.boot
spring-boot-dependencies
1.3.5.RELEASE
pom
import
2.3. Dependências
Para que o Spring Boot controle o jOOQ, uma dependência do artefatospring-boot-starter-jooq precisa ser declarada:
org.springframework.boot
spring-boot-starter-jooq
1.3.5.RELEASE
Observe que este artigo se concentra na distribuição de código aberto do jOOQ. Se você quiser trabalhar com as distribuições comerciais, verifique oGuide to Using jOOQ’s Commercial Distributions with Spring Boot no blog oficial.
3. Configuração de inicialização do Spring
3.1. Configuração de Inicialização Inicial
Antes de chegarmos ao suporte jOOQ, vamos começar a preparar as coisas com o Spring Boot.
Primeiro, vamos aproveitar as vantagens do suporte de persistência e melhorias no Boot e nossas informações de acesso a dados no arquivoapplication.properties padrão. Dessa forma, podemos pular a definição dos beans e configurá-los através de um arquivo de propriedades separado.
Vamos adicionar o URL e as credenciais aqui para definir nosso banco de dados H2 incorporado:
spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=
Também vamos definir um aplicativo de inicialização simples:
@SpringBootApplication
@EnableTransactionManagement
public class Application {
}
Vamos deixar este simples e vazio e definiremos todas as outras declarações de bean em outra classe de configuração -InitialConfiguration.
3.2. Configuração do Bean
Vamos agora definir esta classeInitialConfiguration:
@Configuration
public class InitialConfiguration {
// Other declarations
}
O Spring Boot gerou e configurou automaticamente o beandataSource com base nas propriedades definidas no arquivoapplication.properties, portanto, não precisamos registrá-lo manualmente. O código a seguir permite que o beanDataSource auto-configurado seja injetado em um campo e mostra como esse bean é usado:
@Autowired
private DataSource dataSource;
@Bean
public DataSourceConnectionProvider connectionProvider() {
return new DataSourceConnectionProvider
(new TransactionAwareDataSourceProxy(dataSource));
}
Como um bean denominadotransactionManager também foi criado e configurado automaticamente pelo Spring Boot, não precisamos declarar nenhum outro bean do tipoDataSourceTransactionManager como no tutorial anterior para aproveitar as vantagens do suporte a transações Spring.
Um beanDSLContext é criado da mesma maneira que na classePersistenceContext do tutorial anterior:
@Bean
public DefaultDSLContext dsl() {
return new DefaultDSLContext(configuration());
}
Por último, uma implementação deConfiguration precisa ser fornecida paraDSLContext. Como o Spring Boot é capaz de reconhecer o dialeto SQL em uso através da existência do artefato H2 no caminho de classe, uma configuração de dialeto não é mais necessária:
public DefaultConfiguration configuration() {
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
jooqConfiguration.set(connectionProvider());
jooqConfiguration
.set(new DefaultExecuteListenerProvider(exceptionTransformer()));
return jooqConfiguration;
}
4. Usando Spring Boot com jOOQ
Para facilitar a demonstração do suporte ao Spring Boot para jOOQ, os casos de teste na preparação deste tutorial são reutilizados com uma pequena alteração nas anotações em nível de classe:
@SpringApplicationConfiguration(Application.class)
@Transactional("transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringBootTest {
// Other declarations
}
É claro que ao invés de adotar a anotação@ContextConfiguration, Spring Boot usa@SpringApplicationConfiguration para tirar vantagem do carregador de contextoSpringApplicationContextLoader para testar aplicativos.
Os métodos de teste para inserir, atualizar e excluir dados são exatamente os mesmos do tutorial anterior. Consulte a seção 5 desse artigo em Usando o jOOQ with Spring para obter mais informações. Todos os testes devem ser executados com sucesso com a nova configuração, provando que o jOOQ é totalmente suportado pelo Spring Boot.
5. Conclusão
Este tutorial aprofundou o uso do jOOQ com o Spring. Ele introduziu as maneiras de um aplicativo Spring Boot tirar proveito do jOOQ para interagir com um banco de dados de maneira segura.
A implementação de todos esses exemplos e trechos de código pode ser encontrada ema GitHub project.