1
resposta

[Reclamação] Erro ao Executar o LeilaoApplication apos configurar o profile "test"

Olá, Tudo bem? Estou tomando o seguinte erro ao executar o LeilaoApplication:

:: Spring Boot :: (v2.3.1.RELEASE)

2024-07-25 18:24:56.994 WARN 3243 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

Esse erro começou a ocorrer após adicionar o profile "test" no run configurarion, sem o profile a aplicação roda mas não inicia corretamente. Até segui a dica do tipico a seguir, mas não deu certo: https://cursos.alura.com.br/forum/topico-erro-ao-executar-o-projeto-spring-jpa-open-in-view-is-enabled-by-default-therefore-database-queries-may-be-performed-during-view-rendering-196452

O erro passou a ser esse após as alteração sugeridas no tópico acima: :: Spring Boot :: (v2.3.1.RELEASE)

2024-07-25 18:31:27.041 WARN 3294 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2024-07-25 18:31:27.066 WARN 3294 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfigProfileTest': Unsatisfied dependency expressed through method 'setContentNegotationStrategy' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'openEntityManagerInViewInterceptorConfigurer' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration$JpaWebConfiguration.class]: Unsatisfied dependency expressed through method 'openEntityManagerInViewInterceptorConfigurer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'openEntityManagerInViewInterceptor' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration$JpaWebConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [br/com/alura/leilao/security/WebSecurityConfigProfileTest.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Circular reference involving containing bean 'webSecurityConfigProfileTest' - consider declaring the factory method as static for independence from its containing instance. Factory method 'entityManagerFactory' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [br/com/alura/leilao/security/WebSecurityConfigProfileTest.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Circular reference involving containing bean 'webSecurityConfigProfileTest' - consider declaring the factory method as static for independence from its containing instance. Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver] 2024-07-25 18:31:27.090 ERROR 3294 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

1 resposta

Olá Marcos, tudo bem?

Pelo que você descreveu, parece que o problema está relacionado à configuração do profile "test" e à inicialização dos beans no Spring Boot, especialmente com a configuração do EntityManagerFactory e DataSource. Esse tipo de erro geralmente está associado a dependências não satisfeitas ou referências circulares entre beans.

Vamos tentar algumas abordagens para resolver isso:

  1. Verifique o Driver JDBC: O erro menciona que não foi possível carregar a classe do driver JDBC com.mysql.jdbc.Driver. Certifique-se de que o driver MySQL está corretamente incluído nas dependências do seu projeto. No pom.xml, você deve ter algo assim:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    
  2. Configuração do Profile de Teste: Certifique-se de que o arquivo application-test.properties está configurado corretamente. Por exemplo:

    spring.datasource.url=jdbc:mysql://localhost:3306/testdb
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.jpa.hibernate.ddl-auto=update
    
  3. Desabilitar open-in-view: Para desativar a configuração spring.jpa.open-in-view, você pode adicionar a seguinte linha no seu arquivo de propriedades:

    spring.jpa.open-in-view=false
    
  4. Verificar Beans e Dependências: O erro também sugere uma referência circular entre seus beans. Verifique se há alguma dependência circular nas suas classes de configuração, especialmente em WebSecurityConfigProfileTest. Tente declarar métodos de fábrica como static se necessário. Por exemplo:

    @Configuration
    public class WebSecurityConfigProfileTest {
    
        @Bean
        public static DataSource dataSource() {
            // configuração do DataSource
        }
    
        @Bean
        public static LocalContainerEntityManagerFactoryBean entityManagerFactory() {
            // configuração do EntityManagerFactory
        }
    }
    

Espero que essas sugestões ajudem a resolver o problema, mas caso não resolvam, peço que compartilhe todo o seu projeto, via GitHub ou Drive do Google. Assim poderei fazer testes para identificar o problema.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.