Forráskód Böngészése

发送功能和自动配置均已实现

lifuquan 1 éve
szülő
commit
46af488c5a

+ 6 - 0
doc/lfq-dingtalk.md

@@ -0,0 +1,6 @@
+# lfq-dingtalk
+
+```yml
+dingothmdq6opv6hjrm5
+SeoyAwUnzFIFY4j4CX089HJ0i-pj1BIzByB3AZcnbCQaq94lZvazFpfEGGQwPznc
+```

+ 6 - 0
pom.xml

@@ -57,6 +57,12 @@
             <artifactId>spring-boot-configuration-processor</artifactId>
             <optional>true</optional>
         </dependency>
+        <!-- spring-boot-starter-test -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
         <!--lombok-->
         <dependency>
             <groupId>org.projectlombok</groupId>

+ 15 - 0
src/main/java/com/nokia/dingtalkapi/config/DingtalkAutoConfiguration.java

@@ -1,10 +1,15 @@
 package com.nokia.dingtalkapi.config;
 
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
 
 import com.nokia.dingtalkapi.properties.DingtalkProperties;
+import com.nokia.dingtalkapi.service.DingtalkService;
+import com.nokia.dingtalkapi.service.impl.DingTalkServiceImpl;
 
 /**
  * 自动配置钉钉API
@@ -14,4 +19,14 @@ import com.nokia.dingtalkapi.properties.DingtalkProperties;
 @EnableConfigurationProperties(DingtalkProperties.class)
 public class DingtalkAutoConfiguration {
 
+    @Bean
+    public DingtalkService dingtalkService() {
+        return new DingTalkServiceImpl();
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
 }

+ 20 - 6
src/main/java/com/nokia/dingtalkapi/config/DingtalkRedisAutoConfiguration.java

@@ -1,14 +1,17 @@
 package com.nokia.dingtalkapi.config;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
 import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
 
+import com.nokia.dingtalkapi.properties.DingtalkProperties;
 import com.nokia.dingtalkapi.properties.DingtalkRedisProperties;
 
 /**
@@ -16,7 +19,7 @@ import com.nokia.dingtalkapi.properties.DingtalkRedisProperties;
  * 使用lettuce框架,仅支持独立部署的redis
  */
 @Configuration
-@ConditionalOnBean(type = { "DingtalkProperties" })
+@ConditionalOnBean(DingtalkProperties.class)
 @ConditionalOnProperty(name = "dingtalk.api.redis.enable", havingValue = "true", matchIfMissing = false)
 @EnableConfigurationProperties(DingtalkRedisProperties.class)
 public class DingtalkRedisAutoConfiguration {
@@ -24,12 +27,23 @@ public class DingtalkRedisAutoConfiguration {
     @Autowired
     private DingtalkRedisProperties properties;
 
-    @Bean
-    public RedisTemplate<String, Object> redisTemplate() {
-        LettuceConnectionFactory factory = new LettuceConnectionFactory(properties.getHost(), properties.getPort());
-        factory.setDatabase(properties.getDatabase());
+    /**
+     * 注入独立的redisTemplate(不同连接地址),需要注入独立的连接工厂
+     * 
+     * @return
+     */
+    @Bean(name = "dingtalkRedisConnectionFactory")
+    public LettuceConnectionFactory dingtalkRedisConnectionFactory() {
+        return new LettuceConnectionFactory(new RedisStandaloneConfiguration(properties.getHost(),
+                properties.getPort()));
+    }
+
+    @Bean("dingtalkRedisTemplate")
+    public RedisTemplate<String, Object> dingtalkRedisTemplate(
+            @Autowired @Qualifier("dingtalkRedisConnectionFactory") LettuceConnectionFactory lettuceConnectionFactory) {
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
-        redisTemplate.setConnectionFactory(factory);
+        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
+        redisTemplate.afterPropertiesSet();
         return redisTemplate;
     }
 }

+ 18 - 4
src/main/java/com/nokia/dingtalkapi/service/impl/DingTalkServiceImpl.java

@@ -5,6 +5,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpEntity;
@@ -14,7 +15,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -35,8 +35,13 @@ public class DingTalkServiceImpl implements DingtalkService {
     @Autowired
     private RestTemplate restTemplate;
 
-    @Autowired
-    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired(required = false)
+    @Qualifier("dingtalkRedisTemplate")
+    private RedisTemplate<String, Object> dingtalkRedisTemplate;
+
+    @Autowired(required = false)
+    @Qualifier("redisTemplate")
+    private RedisTemplate<String, Object> defaultRedisTemplate;
 
     @Autowired
     private ObjectMapper objectMapper;
@@ -180,6 +185,11 @@ public class DingTalkServiceImpl implements DingtalkService {
      * @return
      */
     private String getApiToken() {
+        RedisTemplate<String, Object> redisTemplate = dingtalkRedisTemplate != null ? dingtalkRedisTemplate
+                : defaultRedisTemplate;
+        if (redisTemplate == null) {
+            throw new RuntimeException("缺少RedisTemplate<String, Object>...");
+        }
         Object token = redisTemplate.opsForValue().get(API_ACCESS_TOKEN_REDIS_KEY + properties.getAppKey());
         if (token == null) {
             // 调用api获取accessToken
@@ -223,8 +233,12 @@ public class DingTalkServiceImpl implements DingtalkService {
      * @return
      */
     private String getOapiToken() {
+        RedisTemplate<String, Object> redisTemplate = dingtalkRedisTemplate != null ? dingtalkRedisTemplate
+                : defaultRedisTemplate;
+        if (redisTemplate == null) {
+            throw new RuntimeException("缺少RedisTemplate<String, Object>...");
+        }
         Object token = redisTemplate.opsForValue().get(OAPI_ACCESS_TOKEN_REDIS_KEY + properties.getAppKey());
-
         if (token == null) {
             String url = "https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}";
 

+ 2 - 1
src/main/resources/META-INF/spring.factories

@@ -1,2 +1,3 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-com.nokia.dingtalkapi.config.DingtalkAutoConfiguration, com.nokia.dingtalkapi.config.DingtalkRedisAutoConfiguration
+com.nokia.dingtalkapi.config.DingtalkAutoConfiguration,\
+com.nokia.dingtalkapi.config.DingtalkRedisAutoConfiguration