web-dev-qa-db-fra.com

L'application Spring Boot ne lit pas le fichier application.properties lors de l'utilisation du test Maven

MISE À JOUR:

J'ai réalisé deux ou trois choses maintenant. Mon fichier application.properties est chargé correctement car j'ai vérifié via le chemin/env (merci Dave) que mes propriétés de base de données sont en cours de chargement. Le problème semble être que lorsque je l'exécute à l'aide du plug-in Spring Boot maven, il ne parvient pas à initialiser mon dataSource.

mvn spring-boot:run

Cela provoque alors l'explosion de mon application avec des erreurs car les autres beans ne peuvent pas être initialisés. Ce qui est étrange, c'est qu'il fonctionne bien depuis Eclipse.

J'ai une classe appelée DataService qui étend JdbcTemplate. Dans mon constructeur DataService, j'injecte la source de données.

@Component
public class DataService extends JdbcTemplate  {

    @Autowired
    public DataService(DataSource dataSource){
        super(dataSource);
    }
    ...more custom methods
}

J'utilise cette classe DataService dans d'autres beans pour effectuer des opérations de base de données. Mon DataSource est défini dans mon application.properties fichier

spring.datasource.url: jdbc:h2:tcp://localhost/~/testdb2
spring.datasource.driverClassName: org.h2.Driver

Ceci est ma classe Application.Java

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableWebMvcSecurity
@EnableAsync
@EnableScheduling
public class Application {

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

J'ai d'abord réalisé cela lorsque j'essayais d'exécuter des tests jUnit à partir de Maven en utilisant

mavent test

Je pensais que cela avait juste à voir avec la façon dont il exécutait les cas de test junit, mais cela se produit également lorsque j'essaie simplement d'exécuter l'application à l'aide de maven.

Ma classe de test JUnit4 est définie comme suit:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={Application.class})
@WebAppConfiguration
public class QuestionRepositoryIntegrationTests {
     ...methods
}

J'ai utilisé l'exemple de la documentation pratique de Spring Boot ( http://projects.spring.io/spring-boot/docs/docs/howto.html )

Lorsque j'exécute cette classe JUnit depuis Eclipse, cela fonctionne très bien. Quand il s'exécute depuis maven, il commence à agir comme je l'ai décrit ci-dessus.

25
John F.

Vous pouvez configurer votre source de données principale comme suit, j'utilise mysql ici. Mais vous pouvez utiliser votre propre source de données. vous pouvez configurer ce qui suit dans votre application.properties inside src/main/resources

spring.datasource.url = jdbc:mysql://localhost:3306/dsm
spring.datasource.username = root
spring.datasource.password = admin123
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

pour exécuter le test dans votre application, vous pouvez utiliser la même source de données ou créer application-test.properties inside src/test/resources et il est possible de configurer la source de données de test là-bas.

5
nijogeorgep

Essayez de définir le <resources> tag dans la section de construction de votre pom, définissant le chemin d'accès au répertoire de ressources où est application.properties:

<build>
        <resources>
            <resource>
                <directory>resources</directory>
                <targetPath>${project.build.outputDirectory}</targetPath>
                <includes>
                    <include>application.properties</include>
                </includes>
            </resource>
        </resources>
</build>
5
Antonino Barila

Ajoutez simplement la déclaration suivante;

@TestPropertySource("classpath:application.properties")

À votre classe de test. Je suppose que vous avez votre fichier application.properties sous src/test/resources

Voici mon exemple de travail;

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:application.properties")
public class TestTwitterFeedRoute extends CamelTestSupport {
//...
}
1
Levent Divilioglu

Cela fonctionne pour moi:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
    ...
}
0
luboskrnac

Assurez-vous que votre annotation @ConfigurationProperties est définie sur le même préfixe que celui que vous utilisez dans votre fichier de configuration (application.config)

0
obesechicken13

Si vous utilisez Eclipse, c'est toujours une bonne idée de vérifier les ressources de construction des projets. (Projet Rclick-> propriétés-> chemin de génération) Je ne récupérais pas mon fichier application.properties et il s'est avéré que je manquais simplement de l'ajouter aux ressources de génération.

0
VDevD