SpringBoot迁移遇到的一些坑

近期公司对项目进行了架构升级,由原来的springmvc整体迁移到springboot,之前对springboot不太熟悉,因此就这么上手了。还好历经一周差不多都迁移过去了。期间也遇到不少坑,当然大神可以路过也许是一些小bug。不过我还是记录下来有可能有人遇到相同的问题可以提供帮助。在这里就不说详细的迁移过程了,这个网上例子一大把。可以写个demo试试。下面直接说问题。

需要引入Configration的组件:

-mybatis : db(读写分离数据源)    -freemarker :freemarker -dubbo : dubbo-redis : redis
-rocketmq : rocketmq
-Secheduled : task
-国际化message : message
-logback : logback

一、包冲突

①在springboot的spring-boot-starter-web默认引入了以下依赖:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.0</version>
</dependency>
<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.7</version>
</dependency>
<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.7</version>
</dependency>

spring-boot-starter-web的这个依赖包里集成了所有的springframework的包比如spring-beantxcore等所就不需要引入springframework的包了。要不然由于版本号或者包冲突导致启动失败。解决方法:删掉springframe的包即可。

②下面这个错误也是包问题

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]: Factory method 'defaultValidator' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/internal/engine/DefaultClockProvider
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579)
	... 18 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/hibernate/validator/internal/engine/DefaultClockProvider

错误是因为引入了这个包造成的,这个包是干嘛的?

软件包 javax.xml.validation 的描述 此包提供了用于 XML 文档验证的 API。Validation 是验证XML 文档是否为指定 XML schema 的实例的过程。XML模式定义了其实例文档将表示的内容模型(也称为 grammar 或 vocabulary),迁移springboot就是剔除所有的xml,所以xml都没了,检测xml造成错误了(自我理解哈)。

二、整合redis遇到的坑

之前使用的是redis原生API,现在使用的是spring.data.redis的API。在注入整合的时候报了一个错如下:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<?, ?>' available: expected single matching bean but found 2: redisTemplate,stringRedisTemplate
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:215)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)
	... 42 moredagaiyi

大概意思就是在注入redis模板的时候发现了两个bean,spring不知道要注入哪个所以导致错误。redisTemplate,stringRedisTemplate这两个bean,其实这两个都可以只是序列化方式不一样。

解决方法:在注入的时候指明你的bean就行。


三、yml配置文件引入另一个yml配置文件

项目写了多个yml配置文件,但需要加载一个,所有的都加载进去,就需要在一个总的里面导入别的,他这个导入是有规则的。举个例子:我在controller导入service的yml文件

#引入service yml配置信息
spring:
  profiles:
    include: service #application-service -后面的名字
比如service  yml文件名字是:application-service.yml 导入后直接写application-后面的名字就行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值