Mon fichier application.properties
définit le profil par défaut comme spring.profiles.active=test
et j'ai une méthode que je programme comme ceci:Méthode Java SpringBoot encore @Scheduled sous @Profile incorrect?
@Scheduled(initialDelay = 2500, fixedRate = 60 * 1000 * minutesRecheckRate)
@Profile("loop")
public void processingLoop() {
System.out.println(Arrays.toString(env.getActiveProfiles()));
//.. the rest is omitted for brevity.
À ma connaissance, dans ces circonstances, je ne verrais ce faire appelé lors de l'exécution de mes tests unitaires parce que Je ne change pas le profil par défaut. Cela s'avère pas être le cas, car cela est encore en train prévu et je vois la sortie
[test]
dans ma console malgré tous mes efforts pour l'empêcher. Qu'est-ce qui se passe? Pourquoi cela fonctionne-t-il encore avec un profil actif différent?
MISE À JOUR: Je ne peux pas donner beaucoup plus en raison du fait que c'est une application pertinente au travail, mais je vais donner ce que je peux.
La classe est configurée comme ceci:
@Configuration
@EnableScheduling
public class BatchConfiguration {
Les tests unitaires sont tous annotés comme ceci:
@SpringApplicationConfiguration(classes = SpringBatchJsontestApplication.class)
public class SpringBatchJsontestApplicationTests extends AbstractTestNGSpringContextTests {
La principale classe d'application est la suivante:
@SpringBootApplication
public class SpringBatchJsontestApplication {
Aucun ils changent tout le reste. Il n'y a pas de fichier context.xml
, il s'agit d'une application SpringBoot donc tout est uniquement annotations.
Ceci est le résultat final qui fonctionne très bien pour moi
@Profile("test")
@Bean(name = TaskManagementConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public ScheduledAnnotationBeanPostProcessor scheduleBeanProcessorOverride() {
logger.info("Test Profile is active, overriding ScheduledAnnotationBeanPostProcessor to prevent annotations from running during tests.");
return new ScheduledAnnotationBeanPostProcessor() {
@Override
protected void processScheduled(Scheduled scheduled, Method method, Object bean) {
logger.info(String.format("Preventing scheduling for %s, %s, %s", scheduled, method, bean.getClass().getCanonicalName()));
}
};
}
Voici la configuration de POM pour déclencher le profil de test, donc je ne plus avoir à le faire explicitement dans mon application.properties
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<systemPropertyVariables>
<spring.profiles.active>test</spring.profiles.active>
</systemPropertyVariables>
</configuration>
</plugin>
pouvez-vous afficher plus de votre code? le code '@ Configuration' environnant et le test unitaire? – leeor
S'il vous plaît montrer votre contexte xml ou autre code avec la configuration de la publicité – SerMintt