Je travaille sur une application et je souhaite uniquement utiliser les fonctionnalités DI de Spring. Mon problème est que je n'arrive pas à désactiver les fonctionnalités de configuration automatique de Spring Boot. Je continue à recevoir cette exception:
@Configuration
public class BeanConfig {
@Bean
public Database database() {
return DatabaseConfig.configureDatabase();
}
@Bean
public UserRepository userRepository() {
return new InMemoryUserRepository(
Collections.singletonList(new UserEntity(
1,
"user",
Arrays.asList(Permission.ADOPT.name(), Permission.EDIT_PROFILE.name()))));
}
@DependsOn("database")
@Bean
public DogRepository dogRepository() {
return new H2DogRepository();
}
@Bean
public AdoptDog adoptDog() {
return new AdoptDog(dogRepository());
}
@Bean
public FindDogs findDogs() {
return new FindDogs(dogRepository());
}
@Bean
public CreateDog createDog() {
return new CreateDog(dogRepository());
}
@Bean
public DeleteDogs deleteDogs() {
return new DeleteDogs(dogRepository());
}
@Bean
public FindUser findUser() {
return new FindUser(userRepository());
}
@PostConstruct
public void initialize() {
ApplicationEngine engine = ServerConfig.configureServer(
userRepository(), adoptDog(), findDogs(), createDog(), findUser(), deleteDogs());
DogUtils.loadDogs().forEach(dogRepository()::create);
CheckerUtils.runChecks(engine, userRepository());
}
}
J'ai essayé de ne pas utiliser @SpringBootApplication uniquement @ComponentScan , mais cela n'a pas fonctionné. J'ai également essayé d'exclure les classes d'autoconfiguration pertinentes:
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class,
HibernateJpaAutoConfiguration.class,
XADataSourceAutoConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication .class, args);
}
}
mais cela ne fonctionne pas non plus. Comment puis-je me débarrasser complètement de la configuration automatique? Je n'ai pas trouvé d'annotation @DisableAutoConfiguration , mais il y a une @EnableAutoConfiguration.
Modifier: p >
Mes beans sont configurés dans un fichier séparé dans le même package que ma classe d'application:
2020-06-26 14:00:03.240 [main] TRACE o.s.b.diagnostics.FailureAnalyzers - Failed to load org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer
java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at org.springframework.boot.diagnostics.FailureAnalyzers.loadFailureAnalyzers(FailureAnalyzers.java:75)
at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:66)
at org.springframework.boot.diagnostics.FailureAnalyzers.<init>(FailureAnalyzers.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:441)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:427)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at MyApplication.main(MyApplication.java:19)
J'ai une technologie de serveur différente et j'utilise ce projet pour démontrer l'interopérabilité Kotlin-Java (tous ces fichiers sont des fichiers Kotlin référencés ici).
3 Réponses :
En fait, cela peut être dû à spring.factories dans certains de vos pots et auteurs qui le violent. (c'est-à-dire ne pas les lister sous la clé EnableAutoConfiguration selon https://docs.spring.io/autorepo/docs/spring-boot/2.0.0.M3/reference/html/boot -features-development-auto-configuration.html
Dans cet exemple, un écouteur d'application sera enregistré indépendamment de la configuration automatique activée ou non. Certains des bocaux de votre chemin de classe peuvent avoir des beans définis dans les usines de printemps https: // www. logicbig.com/tutorials/spring-framework/spring-boot/application-listener-via-spring-factories.html
J'ai essayé de ne pas utiliser @SpringBootApplication uniquement @ComponentScan , mais cela n'a pas fonctionné.
Le problème est que certaines classes ne sont pas sur le chemin de classe que Spring essaie d'utiliser, mais cela ne devrait pas du tout les toucher car je ne veux utiliser que les fonctionnalités DI.
Le problème était que Spring recherchait des classes que je n'avais pas (je n'en utilise aucune) mais qui étaient nécessaires pour que cela fonctionne.
Une fois, j'ai ajouté "org.springframework.boot: spring-boot-starter-data-jdbc" et "javax.validation: validation-api: 2.0.1.Final" < / code> comme dépendances, il a commencé à fonctionner.
Ajoutez uniquement spring-boot aux dépendances (n'utilisez pas *-starter-*)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
, et utilisez @ComponentScan au lieu de @SpringBootApplication.
Avant que Spring Boot n'arrive, nous ne pouvions faire que ce que vous vouliez faire… cela faisait longtemps pour moi, je travaillais sur des applications spring-mvc. L'essentiel est simplement de lancer un contexte d'application. Avec spring-mvc qui a été déclenché par le cycle de vie du servlet, mais vous pouvez simplement en créer un à partir d'une méthode principale ou de tout autre point de raccordement qui fonctionne pour vous. Je n'ai rien sous la main mais il doit y avoir des exemples de ressorts non-boot dans la documentation du printemps