Code Monkey home page Code Monkey logo

dingtalk-spring-boot-starter's Introduction

dingtalk-spring-boot-starter's People

Contributors

answerail avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dingtalk-spring-boot-starter's Issues

keyword 没看懂是怎么使用

启动时能正常发送
但是测试要求keyword时不行,返回值
{"code":"DK000","data":"DK7A37FAD09BE5442F9FFB79E2D87501C8","logid":"DK7A37FAD09BE5442F9FFB79E2D87501C8","message":"success"}

集成到项目中提示URI is not hierarchical

java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.(File.java:418)
at com.jaemon.dingtalk.utils.PackageUtils.forClassNames(PackageUtils.java:97)
at com.jaemon.dingtalk.utils.PackageUtils.classNames(PackageUtils.java:73)
at com.jaemon.dingtalk.listeners.DingerXmlPreparedEvent.onApplicationEvent(DingerXmlPreparedEvent.java:96)
at com.jaemon.dingtalk.listeners.DingerXmlPreparedEvent.onApplicationEvent(DingerXmlPreparedEvent.java:44)

通过debug看到uri的信息是:jar:file:/D:/soft/maven/repository/org/springframework/cloud/spring-cloud-context/2.2.5.RELEASE/spring-cloud-context-2.2.5.RELEASE.jar!/org/springframework/cloud/bootstrap

dinger class is empty

JRE:
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

SpringBoot: 2.2.1.RELEASE

dinger打包成二方包后,类加载出错

错误堆栈:
java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.(File.java:418)
at com.github.jaemon.dinger.utils.PackageUtils.forClassNames(PackageUtils.java:108)
at com.github.jaemon.dinger.utils.PackageUtils.classNames(PackageUtils.java:78)
at com.github.jaemon.dinger.core.spring.DingerScannerRegistrar.registerBeanDefinitions(DingerScannerRegistrar.java:74)
at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:385)
at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)

支持代理请求发送消息

在一些企业,生产服务是不能直接访问公网,需要通过proxy 请求转发,能否增加代理发送?

兼容性问题

SpringBoot 3.X 好像不支持

Spring Boot Version:3.0.4
Version: 2.1.0

能否支持按需自动配置

非常感谢作者提供这个库,简化了很多工作!

现状 & 需求

目前使用的是 1.21,程序有时候会用到推送功能,有时候又不需要,在不需要使用推送功能的时候,会因为缺少必要的配置项而导致应用启动失败(因为不需要使用该功能,自然也不会添加dingtalk的相关配置)

报错日志

2023-01-03 13:42:21.001 ERROR 1015926 [R ] [U ] --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.github.jaemon.dinger.config.DingerConfiguration': Unsatisfied dependency expressed through field 'dingerProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.dinger-com.github.jaemon.dinger.core.entity.DingerProperties': Invocation of init method failed; nested exception is com.github.jaemon.dinger.exception.InvalidPropertiesFormatException: spring.dinger.dingers is empty.
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
        at com.power4j.fist.monitor.MonitorApplication.main(MonitorApplication.java:19)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.dinger-com.github.jaemon.dinger.core.entity.DingerProperties': Invocation of init method failed; nested exception is com.github.jaemon.dinger.exception.InvalidPropertiesFormatException: spring.dinger.dingers is empty.
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)
        ... 28 common frames omitted
Caused by: com.github.jaemon.dinger.exception.InvalidPropertiesFormatException: spring.dinger.dingers is empty.
        at com.github.jaemon.dinger.core.entity.DingerProperties.afterPropertiesSet(DingerProperties.java:260)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
        ... 38 common frames omitted

期望的效果

这个库能够按需启用,默认是不进行bean初始化,当配置文件存在相关配置时才激活自动配置

springboot工程打包后在CentOS上无法使用

启动日志:
WARN [main] com.jaemon.dingtalk.listeners.DingerXmlPreparedEvent[DingerXmlPreparedEvent.java:133] when analysis classpath:/config/dinger/*.xml:spring.dingtalk.dinger-locations dinger xml and annotation catch exception=class path resource [config/dinger/Dinger.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/home/java/server/trade.jar!/BOOT-INF/classes!/config/dinger/Dinger.xml

项目打包放到centos服务器上无法运行,通过日志看到,在启动时无法读取jar包中的xml文件

企业微信wetalk不支持markdown格式的`@`功能?

https://developer.work.weixin.qq.com/document/path/91770#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%BE%A4%E6%9C%BA%E5%99%A8%E4%BA%BA
机器人的text/markdown类型消息支持在content中使用<@userid>扩展语法来@群成员

官方文档Markdown支持@群成员
为何包不支持?wetalk不支持markdown格式的@功能

1.x版本单元测试就报错

按照1.x 版本

单元测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class LeafServiceManagerTest {
    @Resource
    private DingTalkSender dingTalkSender;

    @Test
    public void getDoctorId() {
        String keyword = "服务预警";
        String subTitle = "服务启动通知";
        String content = "服务启动啦。。。";

        // text类型
        dingTalkSender.send(MsgTypeEnum.TEXT, keyword, subTitle, content);

        // markdown类型
        dingTalkSender.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content);
    }
}

报错信息


	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
	at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189)
	at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.jaemon.dingtalk.entity.DingTalkProperties' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1092)
	at com.jaemon.dingtalk.listeners.SuccessEventListener.onApplicationEvent(SuccessEventListener.java:38)
	at com.jaemon.dingtalk.listeners.SuccessEventListener.onApplicationEvent(SuccessEventListener.java:30)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
	at org.springframework.boot.context.event.EventPublishingRunListener.finished(EventPublishingRunListener.java:101)
	at org.springframework.boot.SpringApplicationRunListeners.callFinishedListener(SpringApplicationRunListeners.java:79)
	at org.springframework.boot.SpringApplicationRunListeners.finished(SpringApplicationRunListeners.java:72)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:187)
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:102)
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:68)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:325)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:296)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
	... 24 more



springboot1.x 启动报错

   <dependency>
        <groupId>com.github.answerail</groupId>
        <artifactId>dingtalk-spring-boot-starter</artifactId>
        <version>3.0.0-RELEASE</version>
    </dependency>

@component
public class InitializingBeanExecute implements InitializingBean {

@Resource
private DingTalkSender dingTalkSender;

@Override
public void afterPropertiesSet() {
    String keyword = "DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM";
    String subTitle = "服务启动通知";
    String content = "服务启动啦。。。";

    // text类型
    dingTalkSender.send(MsgTypeEnum.TEXT, keyword, subTitle, content);

    // markdown类型
    dingTalkSender.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content);
}

spring.dingtalk.token-id=xxx
spring.dingtalk.monitor.success=true
spring.dingtalk.monitor.falied=true
spring.dingtalk.project-id=${spring.application.name}
spring.dingtalk.async=true

Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.getAllSources()Ljava/util/Set;
at com.jaemon.dingtalk.listeners.StartEventListener.onApplicationEvent(StartEventListener.java:45)
at com.jaemon.dingtalk.listeners.StartEventListener.onApplicationEvent(StartEventListener.java:34)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:68)
at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)

同一台机子同一个markdown 接口 钉钉发送的内容一模一样(第一次为准)

@DingerMarkdown(
        value = "###  移动花卡选号预警 \n - 时间:${time}\n - 省:${province}\n - 市:${city}\n - 问题描述:${content}\n #### [查看链接](${link}) \n",
        title = "号卡业务预警", phones = {""},
        tokenId = @DingerTokenId(
                value = "",
                secret = "" ))
DingTalkResult selectNoNumberWarn(@Parameter("time") String time,
        @Parameter("province") String province, @Parameter("city") String city,
        @Parameter("content") String content, @Parameter("link") String link);

钉钉消息=============================20======2020年10月12日 09时49分32秒======海南===三亚市=======291秒内选号失败20次==={"code":"DK000","data":"{"errcode":0,"errmsg":"ok"}","logid":"DK257BDE1B86CB4250B91C3DD826267017","message":"success"}
最后钉钉机器人发送的消息如下图:
887B9F0A-B503-4404-A14D-86CF483C0D68
49分收到的还是以前的时间发送过的内容一模一样
然后我重启程序发送的内容就会变 是不是封装漏了参数

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.