瀏覽代碼

配置服务基础代码

duyalong@shanmuzhi.com 5 年之前
當前提交
ded831f0fe

+ 96 - 0
pom.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.sun</groupId>
+    <artifactId>springbootConfig</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>1.5.8.RELEASE</version>
+        <relativePath /> <!-- lookup parent from repository -->
+    </parent>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Edgware.SR2</spring-cloud.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <!-- 添加这个依赖之后就可以创建一个web应用程序。starter poms部分可以引入所有需要在实际项目中使用的依赖。
+            spring-boot-starter-web依赖包含所有的spring-core, spring-web, spring-webmvc,嵌入的Tomcat server和其他web应用相关的库。 -->
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-jaxb-annotations</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-eureka-server</artifactId>
+            <version>1.3.5.RELEASE</version>
+        </dependency>
+
+        <!--Spring Cloud Config 客户端依赖-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+            <version>1.4.0.RELEASE</version>
+        </dependency>
+
+        <!--Spring Boot Actuator,感应服务端变化-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-dependencies</artifactId>
+            <version>${spring-cloud.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+
+
+</project>

+ 42 - 0
src/main/java/common/entity/RestfulResult.java

@@ -0,0 +1,42 @@
+package common.entity;
+
+
+public class RestfulResult {
+
+    private String result = "Success";
+    private String message;
+    private Object data;		// 返回数据
+    private int cntPage;		// page数
+    private long cntData;		// 返回数据总数
+
+    public String getResult() {
+        return result;
+    }
+    public void setResult(String result) {
+        this.result = result;
+    }
+    public String getMessage() {
+        return message;
+    }
+    public void setMessage(String message) {
+        this.message = message;
+    }
+    public Object getData() {
+        return data;
+    }
+    public void setData(Object data) {
+        this.data = data;
+    }
+    public int getCntPage() {
+        return cntPage;
+    }
+    public void setCntPage(int cntPage) {
+        this.cntPage = cntPage;
+    }
+    public long getCntData() {
+        return cntData;
+    }
+    public void setCntData(long cntData) {
+        this.cntData = cntData;
+    }
+}

+ 33 - 0
src/main/java/common/utils/CommUtils.java

@@ -0,0 +1,33 @@
+package common.utils;
+
+
+import javax.servlet.http.HttpServletResponse;
+
+public class CommUtils {
+
+    // JSON格式化
+    public static String printDataJason(HttpServletResponse response,
+                                        Object item) {
+        try {
+
+            JsonUtils.renderString(response, item);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * 随机生成6位随机验证码
+     */
+    public static String createRandomVcode(int len) {
+        // 验证码
+        String vcode = "";
+        for (int i = 0; i < len; i++) {
+            vcode = vcode + (int) (Math.random() * 9);
+        }
+        return vcode;
+    }
+}

+ 148 - 0
src/main/java/common/utils/JsonMapper.java

@@ -0,0 +1,148 @@
+package common.utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser.Feature;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.util.JSONPObject;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.TimeZone;
+
+public class JsonMapper extends ObjectMapper {
+    private static final long serialVersionUID = 1L;
+    private static Logger logger = LoggerFactory.getLogger(JsonMapper.class);
+    private static JsonMapper mapper;
+
+    public JsonMapper() {
+        this(Include.NON_EMPTY);
+    }
+
+    public JsonMapper(Include include) {
+        if (include != null) {
+            this.setSerializationInclusion(include);
+        }
+
+        this.enableSimple();
+        this.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
+            public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
+                jgen.writeString("");
+            }
+        });
+        this.registerModule((new SimpleModule()).addSerializer(String.class, new JsonSerializer<String>() {
+            public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
+                jgen.writeString(StringEscapeUtils.unescapeHtml4(value));
+            }
+        }));
+        this.setTimeZone(TimeZone.getDefault());
+    }
+
+    public static JsonMapper getInstance() {
+        if (mapper == null) {
+            mapper = (new JsonMapper()).enableSimple();
+        }
+
+        return mapper;
+    }
+
+    public static JsonMapper nonDefaultMapper() {
+        if (mapper == null) {
+            mapper = new JsonMapper(Include.NON_DEFAULT);
+        }
+
+        return mapper;
+    }
+
+    public String toJson(Object object) {
+        try {
+            return this.writeValueAsString(object);
+        } catch (IOException var3) {
+            logger.warn("write to json string error:" + object, var3);
+            return null;
+        }
+    }
+
+    public <T> T fromJson(String jsonString, Class<T> clazz) {
+        if (StringUtils.isEmpty(jsonString)) {
+            return null;
+        } else {
+            try {
+                return this.readValue(jsonString, clazz);
+            } catch (IOException var4) {
+                logger.warn("parse json string error:" + jsonString, var4);
+                return null;
+            }
+        }
+    }
+
+    public <T> T fromJson(String jsonString, JavaType javaType) {
+        if (StringUtils.isEmpty(jsonString)) {
+            return null;
+        } else {
+            try {
+                return this.readValue(jsonString, javaType);
+            } catch (IOException var4) {
+                logger.warn("parse json string error:" + jsonString, var4);
+                return null;
+            }
+        }
+    }
+
+    public JavaType createCollectionType(Class<?> collectionClass, Class... elementClasses) {
+        return this.getTypeFactory().constructParametricType(collectionClass, elementClasses);
+    }
+
+    public <T> T update(String jsonString, T object) {
+        try {
+            return this.readerForUpdating(object).readValue(jsonString);
+        } catch (JsonProcessingException var4) {
+            logger.warn("update json string:" + jsonString + " to object:" + object + " error.", var4);
+        } catch (IOException var5) {
+            logger.warn("update json string:" + jsonString + " to object:" + object + " error.", var5);
+        }
+
+        return null;
+    }
+
+    public String toJsonP(String functionName, Object object) {
+        return this.toJson(new JSONPObject(functionName, object));
+    }
+
+    public JsonMapper enableEnumUseToString() {
+        this.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
+        this.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
+        return this;
+    }
+
+    public JsonMapper enableJaxbAnnotation() {
+        JaxbAnnotationModule module = new JaxbAnnotationModule();
+        this.registerModule(module);
+        return this;
+    }
+
+    public JsonMapper enableSimple() {
+        this.configure(Feature.ALLOW_SINGLE_QUOTES, true);
+        this.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+        return this;
+    }
+
+    public ObjectMapper getMapper() {
+        return this;
+    }
+
+    public static String toJsonString(Object object) {
+        return getInstance().toJson(object);
+    }
+
+    public static Object fromJsonString(String jsonString, Class<?> clazz) {
+        return getInstance().fromJson(jsonString, clazz);
+    }
+}

+ 24 - 0
src/main/java/common/utils/JsonUtils.java

@@ -0,0 +1,24 @@
+package common.utils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class JsonUtils {
+    public JsonUtils() {
+    }
+
+    public static String renderString(HttpServletResponse response, Object object) {
+        return renderString(response, JsonMapper.toJsonString(object), "application/json");
+    }
+
+    public static String renderString(HttpServletResponse response, String string, String type) {
+        try {
+            response.setContentType(type);
+            response.setCharacterEncoding("utf-8");
+            response.getWriter().print(string);
+            return null;
+        } catch (IOException var4) {
+            return null;
+        }
+    }
+}

+ 16 - 0
src/main/java/sun/ConsumerClientApplication.java

@@ -0,0 +1,16 @@
+package sun;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+class ConsumerClientApplication {
+
+    public static void main(String[] args) {
+
+        SpringApplication.run(ConsumerClientApplication.class, args);
+    }
+}

+ 40 - 0
src/main/java/sun/controller/ServiceController.java

@@ -0,0 +1,40 @@
+/**
+ * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
+ */
+package sun.controller;
+
+import common.entity.RestfulResult;
+import common.utils.CommUtils;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import sun.entity.ServiceInfo;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@RestController // 重要,如果用Controller会404
+@RequestMapping(value = "/service")
+public class ServiceController {
+
+    @RequestMapping(value = "/hello")
+    public void login(HttpServletRequest request, HttpServletResponse response,
+                      @RequestBody ServiceInfo serviceInfo) {
+        RestfulResult restfulResult = new RestfulResult();
+
+        try {
+            restfulResult.setData("Service2:Welcome " + serviceInfo.getName() + "!");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        CommUtils.printDataJason(response, restfulResult);
+    }
+
+    @RequestMapping(value = "rest")
+    public String rest(@RequestBody ServiceInfo serviceInfo){
+
+        return "Service2:Welcome " + serviceInfo.getName() + " !";
+    }
+}

+ 15 - 0
src/main/java/sun/entity/ServiceInfo.java

@@ -0,0 +1,15 @@
+package sun.entity;
+
+public class ServiceInfo {
+    private static final long serialVersionUID = 1L;
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 30 - 0
src/main/resources/application.yml

@@ -0,0 +1,30 @@
+server:
+  port: 6003
+spring:
+  application:
+    name: springbootConfig
+  profiles:
+    active: subversion
+  cloud:
+    config:
+      server:
+        server:
+          git:
+            uri: http://139.199.7.184:3000/dyl/springCloudConfig.git
+            # 配置git仓库的地址
+            search-paths: 
+            # git仓库地址下的相对地址,可以配置多个,?,分割。
+            username:
+            # git仓库的账号
+            password:
+            # git仓库的密码
+
+eureka:
+  client:
+    service-url:
+      defaultZone: http://localhost:5000/eureka/
+  instance:
+    preferIpAddress: true
+    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
+    lease-expiration-duration-in-seconds: 30
+    lease-renewal-interval-in-seconds: 30