org.springframework.boot.autoconfigure.*jar包冲突的解决方案

本文详细解析了在Spring Boot项目中遇到的java.lang.IllegalStateException错误,该问题由pom文件中的版本不兼容和Jar包冲突引起。文章提供了两步解决方案:清除缓存重启及注释冲突的包,指导读者如何定位并解决冲突。

问题

java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration.persistenceExceptionTranslationPostProcessor

在这里插入图片描述

原因

pom文件中,引入的文件版本不兼容,jar包冲突。

解决方案

(1)点击清除缓存并重启的按钮

在这里插入图片描述

(2)注释发生冲突的包

在可能发送冲突的pom文件中,使用快捷键,Ctrl+Alt+Shift+u,即可通过下图红色的线查看冲突的jar包:
在这里插入图片描述

放大可以看到具体的冲突的jar包。
在这里插入图片描述

去pom文件中,找到冲突的jar包,并注释掉。
在这里插入图片描述

项目可以运行了。

/** * @(#)Application.java, 二月 15, 2017. * <p> * Copyright 2017 fenbi.com. All rights reserved. * FENBI.COM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.fenbi.app.server; import com.fenbi.commons.core.log.GLog; import com.fenbi.commons.spring.utils.SpringBootEnvUtils; import com.fenbi.gateway.zookeeper.serviceregistry.EnableAutoRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.autoconfigure.aop.AopAutoConfiguration; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration; import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration; import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration; import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration; import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration; import org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration; import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; import org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration; import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration; import org.springframework.boot.autoconfigure.hateoa
03-19
### Spring Boot 应用配置及自动配置类的作用 Spring Boot 的核心理念之一是 **约定优于配置** (Convention over Configuration),这使得开发者可以快速构建应用程序而无需过多关注繁琐的 XML 或 Java 配置。以下是关于 Spring Boot 中的应用配置 (`@Configuration`) 和自动配置类 (`@AutoConfiguration`) 的详细解释: #### 1. `@Configuration` 注解及其作用 `@Configuration` 是一个用于定义 Spring Bean 容器中的配置类的核心注解。它通常用来替代传统的 XML 文件配置方式,通过 Java 类的形式声明和管理 Bean。 - 当一个类被标记为 `@Configuration` 后,该类会被视为一个配置源,其中的方法可以通过 `@Bean` 注解来注册新的 Bean 到容器中[^1]。 ```java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } } ``` 这种机制提供了极大的灵活性,使开发人员能够以编程的方式控制依赖注入的行为。 #### 2. 自动配置类的工作原理 Spring Boot 提供了一种强大的功能——**自动配置**(Auto-Configuration),其目的是减少手动配置的需求。当启动 Spring Boot 应用程序时,框架会扫描classpath并根据已存在的库动态加载相应的默认设置。 - 这些自动配置逻辑由一系列带有 `@Conditional` 注解的类实现。例如,在检测到某些条件满足时(如存在特定的 JAR 包或属性值匹配),才会激活某个自动配置类[^4]。 ```java @Configuration @ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class}) @EnableConfigurationProperties(DataSourceProperties.class) public class DataSourceAutoConfiguration { ... } ``` 此代码片段展示了如何基于是否存在数据源相关组件来自动生成数据库连接池等必要资源。 #### 3. 排除不需要的自动配置项 尽管大多数情况下默认行为已经足够好用了,但在特殊场景下可能需要禁用部分不适用的功能模块。这时就可以利用 `exclude` 参数指定要忽略掉哪些具体的 AutoConfigurations: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> ``` 上面的例子说明了如何去除了内置的日志记录支持以便替换其他日志框架比如 Log4j. #### 4. 打包与运行时环境调整 为了方便部署,Spring Boot 支持将整个项目构建成独立运行的 jar 文件形式发布出去。在此过程中需要注意几个要点: - 设置正确的入口 Main Class 来引导应用初始化过程. - 解决可能出现因版本冲突引起的问题. 下面是一个典型的 Maven 插件配置示例展示怎样指明主类位置以及避免重复打包带来的麻烦[^2]: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.MyApplication</mainClass> </configuration> </plugin> </plugins> </build> ``` 另外如果遇到 bean 覆盖警告,则可通过显式开启覆盖开关解决此类矛盾情况: ```properties spring.main.allow-bean-definition-overriding=true ``` --- ### 总结 综上所述,Spring Boot 的应用配置主要围绕着简化传统 Spring 开发流程展开;借助于智能化程度极高的自动装配能力,极大地降低了初学者的学习门槛同时也提高了生产力效率。然而实际操作当中仍需依据具体业务需求灵活运用各项特性才能达到最佳效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值