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.
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.
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>
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 {
//...
}
Cela fonctionne pour moi:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class,
initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
...
}
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)
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.