Bladeren bron

1. 优化mongo的连接
2. 日志功能点优化

liukx 4 jaren geleden
bovenliggende
commit
bb0ea41c5f

+ 4 - 2
elab-log/src/main/java/com/elab/log/utils/CatCrossProcess.java

@@ -69,10 +69,12 @@ public class CatCrossProcess {
      */
     public static Object createRemoteMQMsg(String type, String name, Function<Map<String, String>, Object> consumer) {
         // 构建一个事务日志
-        TaggedTransaction t = Cat.newTaggedTransaction(type, name, "MQ");
+        Transaction t = Cat.newTransaction(type, name);
+        // 该类型消息是不会作为事务消息去统计,并且不会在Transaction报表中展现
+        // TaggedTransaction t = Cat.newTaggedTransaction(type, name, "MQ");
         try {
             Map<String, String> msgContextMap = getDomainMsgContextMap("MQ-CONSUMER");
-            t.bind("MQ",msgContextMap.get(Cat.Context.CHILD),"MQ消息请走特殊查询");
+            //t.bind("MQ",msgContextMap.get(Cat.Context.CHILD),"MQ消息请走特殊查询");
             // 构建一个上下文事务消息
 
             Object apply = consumer.apply(msgContextMap);

+ 6 - 0
elab-mongodb/pom.xml

@@ -35,6 +35,12 @@
             <artifactId>spring-data-mongodb</artifactId>
             <version>1.10.11.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <version>${springboot.version}</version>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>

+ 119 - 0
elab-mongodb/src/main/java/com/elab/mongodb/config/MongoAutoConfiguration.java

@@ -0,0 +1,119 @@
+package com.elab.mongodb.config;
+
+import com.elab.core.utils.DataUtils;
+import com.elab.mongodb.config.property.MongoConfig;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoClientURI;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
+import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
+import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
+import org.springframework.data.mongodb.core.convert.MongoConverter;
+
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author liuhx
+ * @create 2019/06/06 11:31
+ * @email liuhx@elab-plus.com
+ **/
+@Configuration
+@EnableConfigurationProperties(value = MongoConfig.class)
+public class MongoAutoConfiguration {
+
+    @Bean
+    @ConditionalOnMissingBean(value = {MongoTemplate.class})
+    public MongoTemplate getMongoTemplate(@Autowired MongoConfig mongoConfig) throws UnknownHostException {
+        String mongoClientHost = mongoConfig.getHost();
+        String[] mongoClientHosts = mongoClientHost.split(",");
+        int[] mongoClientPorts = {mongoConfig.getPort()};
+        String mongodbName = mongoConfig.getDatabaseName();
+        String clusterUrl = mongoConfig.getClusterUrl();
+        String userName = mongoConfig.getUserName() == null ? "" : mongoConfig.getUserName();
+        String password = mongoConfig.getPassword() == null ? "" : mongoConfig.getPassword();
+    if (null != clusterUrl && clusterUrl.length() > 0) {
+            String[] hostAndPorts = clusterUrl.split(",");
+            mongoClientHosts = new String[hostAndPorts.length];
+            mongoClientPorts = new int[hostAndPorts.length];
+            for (int i = 0; i < hostAndPorts.length; i++) {
+                String[] hostAndPortArray = hostAndPorts[i].split(":");
+                mongoClientHosts[i] = hostAndPortArray[0];
+                mongoClientPorts[i] = Integer.parseInt(hostAndPortArray[1]);
+            }
+            return buildMongoTemplateCluster(mongoClientHosts, mongoClientPorts, mongodbName, userName, password);
+        } else {
+            MongoCredential userCredentials =
+                MongoCredential.createCredential(userName, mongoConfig.getDatabaseName(), password.toCharArray());
+            return buildMongoTemplate(mongoClientHosts, mongoConfig.getPort(), mongodbName, userCredentials);
+        }
+    }
+
+    private MongoTemplate buildMongoTemplate(String[] mongoClientHosts, int port, String mongodbName,
+        MongoCredential userCredentials) throws UnknownHostException {
+        List<ServerAddress> serverAddressList = new ArrayList<>();
+        for (String host : mongoClientHosts) {
+            serverAddressList.add(new ServerAddress(host, port));
+        }
+        MongoClient mongoClient = new MongoClient(serverAddressList);
+        SimpleMongoDbFactory mongoDbFactory = null;
+        if (userCredentials != null && StringUtils.isNotEmpty(userCredentials.getUserName())
+            && userCredentials.getPassword() != null) {
+            //mongodb://${mongo.username}:${mongo.password}@${mongo.uri}/${mongo.db}
+            String uri =
+                "mongodb://" + userCredentials.getUserName() + ":" + new String(userCredentials.getPassword()) + "@"
+                    + mongoClientHosts[0] + ":" + port + "/" + mongodbName + "";
+            MongoClientURI mongoClientURI = new MongoClientURI(uri);
+            mongoDbFactory = new SimpleMongoDbFactory(mongoClientURI);
+        } else {
+            mongoDbFactory = new SimpleMongoDbFactory(mongoClient, mongodbName);
+        }
+
+        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
+        convertClass(mongoTemplate);
+        return mongoTemplate;
+    }
+
+    private MongoTemplate buildMongoTemplateCluster(String[] mongoClientHosts, int[] mongoClientPorts,
+        String mongodbName, String userName, String password) {
+        try {
+            List<ServerAddress> serverAddressList = new ArrayList<>();
+            for (int i = 0; i < mongoClientHosts.length; i++) {
+                if (mongoClientPorts.length < i + 1) {
+                    mongoClientPorts[i] = mongoClientPorts[i - 1];
+                }
+                serverAddressList.add(new ServerAddress(mongoClientHosts[i], mongoClientPorts[i]));
+            }
+            MongoCredential userCredentials =
+                MongoCredential.createCredential(userName, mongodbName, password.toCharArray());
+            List<MongoCredential> userCredentialsList = new ArrayList<>();
+            userCredentialsList.add(userCredentials);
+            MongoClient mongoClient = new MongoClient(serverAddressList, userCredentialsList);
+
+            SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, mongodbName);
+            MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
+            convertClass(mongoTemplate);
+            return mongoTemplate;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private void convertClass(MongoTemplate mongoTemplate) {
+        MongoConverter converter = mongoTemplate.getConverter();
+        if (converter.getTypeMapper().isTypeKey("_class")) {
+            ((MappingMongoConverter)converter).setTypeMapper(new DefaultMongoTypeMapper(null));
+        }
+    }
+
+}

+ 77 - 0
elab-mongodb/src/main/java/com/elab/mongodb/config/property/MongoConfig.java

@@ -0,0 +1,77 @@
+package com.elab.mongodb.config.property;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author duh
+ * @create 2018/8/13 17:47
+ * @email duh@elab-plus.com
+ **/
+@Component
+@ConfigurationProperties(prefix = "mongodb")
+public class MongoConfig {
+    private String host;
+    private int port;
+    private String clusterUrl;
+    private String databaseName;
+    private String userName;
+    private String password;
+    private String uri;
+
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getClusterUrl() {
+        return clusterUrl;
+    }
+
+    public void setClusterUrl(String clusterUrl) {
+        this.clusterUrl = clusterUrl;
+    }
+
+    public String getDatabaseName() {
+        return databaseName;
+    }
+
+    public void setDatabaseName(String databaseName) {
+        this.databaseName = databaseName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

+ 1 - 0
elab-mongodb/src/main/resources/META-INF/spring.factories

@@ -0,0 +1 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.elab.mongodb.config.MongoAutoConfiguration