项目迁移异常问题,‘url‘ attribute is not specified and no ...java.lang.NoClassDefFoundError: org/springframew

本文记录了在项目迁移中遇到各种冲突,以及如何寻找问题原因,以及快速解决方案,其中包含多数据源相关问题,依赖冲突,版本冲突等问题

迁移的是gitub上开源项目,使用的是多数据源,迁移到公司自己项目架构上,发生了种种问题,

下面是问题产生和种种修改过程,希望对大家做迁移或者项目架构时有一定的帮助。

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine suitable jdbc url


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (the profiles dev are currently active).

首先这是一个常见的数据源未找到的,自动加载配置没有成功。理论上来说我们用多数据源配置,应该使用多数源包下面的自动加载配置类

上面是报错的一些信息,可以看到是DataSourcePoolMetricsAutoConfiguration 这个自动配置没有成功,这是我们先看一下这个是属于哪个包下面的。

可以idea定位一下,然后接下来最好的就是看这个依赖是否是绝对需要的,如果不需要,则在项目中找到依赖关系,把他排除。或者还有使用springboot的排除自动配置注解。可能我们在项目中遇到的是不同的类但大致都是用这两种方法。

再次启动

依然还是报错,不过这次可以看到他报错的配置类已经不同DruidDataSourceAutoConfigure,是说明有效果的继续用上述方法,排除依赖或者排除启动类。

继续

这次是FlywayAutoConfiguration

这时候排除的已经非常多了,其实有时候还是建议的是优化依赖关系。

上面这是原项目的数据库相关依赖

这是现项目的依赖,可以看到是非常多而且杂的很容易冲突,熟悉自己项目的依赖关系进行优化

多数据源用一个依赖就可以了

尽量把别的相关依赖都排除

使用exclusions标签。。甚至可以先把所有数据库相关依赖都排除至相关类找不到,再单个添加依赖。

数据库连接成功

但似乎又有新的问题

如果你对自己框架熟悉那么很容易看出其中的问题,而我自己比较熟悉这套框架,hztechRedis 是公司框架封装的redis使用包,很明显这是跟原项目(需要迁移过来的项目)中封装的redis包冲突了,这是你可以替换他的使用,但这是很麻烦的事情需要修改源码。最方便的当然是直接排除

解决,继续向下(别看这是直接打开那个注掉的就行,因为是复盘所以直接去掉注释)

新的问题

新的问题缺少类,很明显FilterChainProxy,在现有项目搜一下确实没有。

原项目中去找,原项目中必然能找到并且确定是那个包下面的。

再看现有项目有无这个依赖,一般都是缺少依赖,从原项目找到依赖关系,发现是boot-starter-security 下的,直接把依赖加过去。

继续启动。新的问题

同样的问题,ClassDefFoundError  去原项目找,这时候你会发现原项目也找不到这个东西

在这种情况下是必须看源码的

可以看到是redis塞数据是使用json序列化出错了,如果同样的代码在一个项目能运行,在另一个项目无法运行那么毋庸置疑是环境问题,依赖冲突

json使用的都是alibaba的包,对比依赖

原项目:

现项目:

仔细一点就能看出项目有一个fastjson 2.0.43 很明显的依赖冲突,寻找依赖关系,进行排除

新的问题

这个也能看出是应项目所使用的日志系统没有导致找不到org.apache.log4j.Logger,导入原项目日志依赖即可

至此项目整体迁移至新架构成功,当然这只是粗略的迁移到能成功运行,要融入到一个新的架构中还需要做很多内部修改。

总结:作为开发者要对项目的异常有一种直觉哪些是依赖冲突,哪些是缺少依赖,哪些是版本冲突,如何进行快速定位,以及解决问题。希望此文对大家有一定的帮助。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值