AnswerAIL / dingtalk-spring-boot-starter

Dinger(叮鸽),SpringBoot集成钉钉/企业微信/飞书群机器人实现消息通知中间件。
https://github.com/AnswerAIL/dingtalk-spring-boot-starter/wiki
Apache License 2.0
345 stars 75 forks source link

dinger-locations配置中使用*.xml提示找不到文件 #13

Closed ucfjepl closed 3 years ago

ucfjepl commented 3 years ago

使用固定文件名称时,exists返回的是true。如果使用*.xml则exists方法返回false springboot版本是2.3.7 1 2

ucfjepl commented 3 years ago

dinger-spring-boot-starter的版本是1.2.0

AnswerAIL commented 3 years ago

@ucfjepl dinger-locations你是怎么配置的,是下面这样配置的吗

dinger-locations: classpath:config/dinger/.xml

AnswerAIL commented 3 years ago

@ucfjepl 不推荐使用固定文件名称进行配置

ucfjepl commented 3 years ago

@AnswerAIL 使用固定文件名称是为了测试 如果使用dinger-locations: classpath:config/dinger/.xml配置则提示重复定义的错误 如果使用dinger-locations: classpath:config/dinger/*.xml则提示找不到文件

以下是两种配置的不同异常信息截图 1 2

AnswerAIL commented 3 years ago

@ucfjepl 你是不是用了注解配置又用了xml配置,如果不是的话把你的代码贴出来我看下,提示:报错重复定义是因为你配置了两处一样的消息体

AnswerAIL commented 3 years ago

@ucfjepl 好好检查下代码是不是重复配置了消息体,用消息id全局搜一下看,如果采用xml配置消息体用这个配置classpath:config/dinger/.xml,当然你也可以用注解方式配置消息体,两种方式任选一种即可

ucfjepl commented 3 years ago

@AnswerAIL 找到问题了,应该是两个地方获取资源文件的方式不一致导致的,这样使用junit时就会出现问题。

在使用junit时,DingerAutoConfiguration的checkConfigFileExists方法中使用的resourceLoader.getResource获取不到xml配置,所以提示文件找不到

1 2

如果在test/resources下面创建一个对应的xml文件,DefaultDingerDefinitionResolver的dingerXmlResolver方法中使用的PathMatchingResourcePatternResolver.getResources会获取到两个配置文件,分别是main/resources和test/resources下的两个文件,此时会提示重复定义的错误

3

是不是应该在DingerAutoConfiguration的checkConfigFileExists和DefaultDingerDefinitionResolver的dingerXmlResolver中使用相同的方式获取资源文件可以解决掉这个问题呢?

AnswerAIL commented 3 years ago

@ucfjepl bug已在1.2.1-beta1版本中进行修复,请知悉

ucfjepl commented 3 years ago

@AnswerAIL 好的,收到