Browse Source

‘这是第一次提交’

liangyt 5 years atrás
parent
commit
969d62531a

+ 31 - 0
.gitignore

@@ -0,0 +1,31 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/

+ 240 - 0
pom.xml

@@ -0,0 +1,240 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.miyzh</groupId>
+    <artifactId>yideb-proxy-srv</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>yideb-proxy-srv</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <java.version>1.8</java.version>
+        <spring.loaded.version>1.2.7.RELEASE</spring.loaded.version>
+
+        <!-- mysql 数据库-->
+        <mysql.version>5.1.38</mysql.version>
+        <!--<mysql.version>8.0.11</mysql.version>-->
+        <druid.version>1.1.10</druid.version>
+        <springboot.mybatis.version>1.3.0</springboot.mybatis.version>
+        <mybatis.generator.version>1.3.7</mybatis.generator.version>
+
+        <!-- 工具类 -->
+        <apache.commons-lang.version>3.2.1</apache.commons-lang.version>
+        <apache.commons-io.version>2.5</apache.commons-io.version>
+        <google.guava.version>21.0</google.guava.version>
+
+        <!-- cache缓存 -->
+        <ehcached.version>2.10.3</ehcached.version>
+        <shiro.ehcache.version>1.3.2</shiro.ehcache.version>
+
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!--redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!-- 添加jedis客户端 -->
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+        <!--数据库-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <!--数据库连接-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql.version}</version>
+        </dependency>
+
+        <!-- alibaba的druid数据库连接池 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>${druid.version}</version>
+        </dependency>
+
+        <!-- 工具类 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>${apache.commons-lang.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${apache.commons-io.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.30</version>
+        </dependency>
+
+        <!-- spring热部署-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>springloaded</artifactId>
+            <version>${spring.loaded.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- cglib 动态代理 -->
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>3.1</version>
+        </dependency>
+
+        <!-- httpclient start -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.4.5</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+        <!-- httpclient end -->
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.9.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <!--rabbitmq-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+            <version>1.5.2.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.14.4</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.56</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.mybatis.generator</groupId>
+                <artifactId>mybatis-generator-maven-plugin</artifactId>
+                <version>${mybatis.generator.version}</version>
+                <executions>
+                    <execution>
+                        <id>Generate MyBatis Artifacts</id>
+                        <phase>deploy</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>mysql</groupId>
+                        <artifactId>mysql-connector-java</artifactId>
+                        <version>${mysql.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.mybatis.generator</groupId>
+                        <artifactId>mybatis-generator-core</artifactId>
+                        <version>${mybatis.generator.version}</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <!--允许移动生成的文件 -->
+                    <verbose>true</verbose>
+                    <!-- 是否覆盖 -->
+                    <overwrite>true</overwrite>
+                    <!-- 自动生成的配置 -->
+                    <configurationFile>
+                        src/main/resources/mybatis/mybatis-generator.xml</configurationFile>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 15 - 0
src/main/java/com/miyzh/YidebProxySrvApplication.java

@@ -0,0 +1,15 @@
+package com.miyzh;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("com.miyzh.mapper")
+public class YidebProxySrvApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(YidebProxySrvApplication.class, args);
+    }
+
+}

+ 133 - 0
src/main/java/com/miyzh/config/RabbitConfig.java

@@ -0,0 +1,133 @@
+package com.miyzh.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+
+/**
+ * @Description: RabbitConfig
+ * @Author: lyt
+ * @Date: 2019/6/21 11:21
+ */
+@Configuration
+public class RabbitConfig {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Value("${spring.rabbitmq.host}")
+    private String host;
+
+    @Value("${spring.rabbitmq.port}")
+    private int port;
+
+    @Value("${spring.rabbitmq.username}")
+    private String username;
+
+    @Value("${spring.rabbitmq.password}")
+    private String password;
+
+
+    public static final String EXCHANGE_A = "my-mq-exchange_A";
+    public static final String EXCHANGE_B = "my-mq-exchange_B";
+    public static final String EXCHANGE_C = "my-mq-exchange_C";
+
+
+    public static final String QUEUE_A = "QUEUE_A";
+    public static final String QUEUE_B = "QUEUE_B";
+    public static final String QUEUE_C = "QUEUE_C";
+
+    public static final String ROUTINGKEY_A = "spring-boot-routingKey_A";
+    public static final String ROUTINGKEY_B = "spring-boot-routingKey_B";
+    public static final String ROUTINGKEY_C = "spring-boot-routingKey_C";
+
+    @Bean
+    public ConnectionFactory connectionFactory() {
+        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
+        connectionFactory.setUsername(username);
+        connectionFactory.setPassword(password);
+        connectionFactory.setVirtualHost("/");
+        connectionFactory.setPublisherConfirms(true);
+        return connectionFactory;
+    }
+
+    @Bean
+    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+    //必须是prototype类型
+    public RabbitTemplate rabbitTemplate() {
+        RabbitTemplate template = new RabbitTemplate(connectionFactory());
+        return template;
+    }
+
+    /**
+     * 针对消费者配置
+     * 1. 设置交换机类型
+     * 2. 将队列绑定到交换机
+     FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念
+     HeadersExchange :通过添加属性key-value匹配
+     DirectExchange:按照routingkey分发到指定队列
+     TopicExchange:多关键字匹配
+     */
+    @Bean
+    public DirectExchange directExchange() {
+        return new DirectExchange(EXCHANGE_A);
+    }
+
+    @Bean
+    public FanoutExchange fanoutExchange() {
+        return new FanoutExchange(EXCHANGE_B);
+    }
+
+    @Bean
+    public TopicExchange topicExchange() {
+        return new TopicExchange(EXCHANGE_C);
+    }
+    /**
+     * 获取队列A
+     * @return
+     */
+    @Bean
+    public Queue queueA() {
+        //队列持久
+        return new Queue(QUEUE_A, true);
+    }
+    @Bean
+    public Binding binding() {
+
+        return BindingBuilder.bind(queueA()).to(directExchange()).with(RabbitConfig.ROUTINGKEY_A);
+    }
+    /**
+     * 获取队列B
+     * @return
+     */
+    @Bean
+    public Queue queueB() {
+        //队列持久
+        return new Queue(QUEUE_B, true);
+    }
+    @Bean
+    public Binding bindingB(){
+        return BindingBuilder.bind(queueB()).to(fanoutExchange());
+    }
+
+    /**
+     * 获取队列B
+     * @return
+     */
+    @Bean
+    public Queue queueC() {
+        //队列持久
+        return new Queue(QUEUE_C, true);
+    }
+    @Bean
+    public Binding bindingC(){
+        return BindingBuilder.bind(queueB()).to(topicExchange()).with(ROUTINGKEY_C);
+    }
+}

+ 22 - 0
src/main/java/com/miyzh/controller/TestController.java

@@ -0,0 +1,22 @@
+package com.miyzh.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Title: TestController
+ * Description:
+ *
+ * @author lyt
+ * @date 2020/6/11 14:26
+ */
+@RestController
+@RequestMapping("test")
+public class TestController {
+
+    @RequestMapping("testIndex")
+    public String testIndex(){
+
+        return "hahah";
+    }
+}

+ 96 - 0
src/main/java/com/miyzh/rabbitMQ/MsgProducer.java

@@ -0,0 +1,96 @@
+package com.miyzh.rabbitMQ;
+
+import com.miyzh.config.RabbitConfig;
+import com.rabbitmq.client.Channel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.UUID;
+
+/**
+ * @Description: 生产者
+ * @Author: lyt
+ * @Date: 2019/6/21 11:26
+ */
+@Component
+public class MsgProducer implements RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnCallback,ChannelAwareMessageListener {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    //由于rabbitTemplate的scope属性设置为ConfigurableBeanFactory.SCOPE_PROTOTYPE,所以不能自动注入
+    private RabbitTemplate rabbitTemplate;
+
+    /**
+     * 构造方法注入rabbitTemplate
+     */
+    @Autowired
+    public MsgProducer(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate;
+        //rabbitTemplate如果为单例的话,那回调就是最后设置的内容
+        rabbitTemplate.setConfirmCallback(this);
+
+    }
+    /**
+     * @author: lyt
+     * @date: 2020/3/3 10:18
+     *
+     * @description: 发送消息
+     */
+    public void sendMsg(String msg) {
+        //消息唯一性
+        CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
+        //把消息放入ROUTINGKEY_A对应的队列当中去,对应的是队列A
+        System.out.println("发送消息。。。。");
+        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_A, RabbitConfig.ROUTINGKEY_A, msg, correlationId);
+    }
+    /**
+     * @author: lyt
+     * @date: 2020/3/3 10:18
+     *
+     * @description: 消息成功发送到队列回调
+     */
+    @Override
+    public void confirm(CorrelationData correlationData, boolean b, String s) {
+        logger.info(" 回调id:" + correlationData);
+        if (b) {
+            logger.info("消息发送成功");
+        } else {
+            logger.info("消息发送失败:" + s);
+        }
+    }
+
+    /**
+     * @author: lyt
+     * @date: 2020/3/3 10:18
+     *
+     * @description: 消息失败后return回调
+     */
+    @Override
+    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
+        logger.error("return--message:"+new String(message.getBody())+",replyCode:"+replyCode+",replyText:"+replyText+",exchange:"+exchange+",routingKey:"+routingKey);
+    }
+
+    /**
+     * @author: lyt
+     * @date: 2020/3/3 10:24
+     *
+     * @description: 消息送达后回调
+     */
+    @Override
+    public void onMessage(Message message, Channel channel) throws Exception {
+        try{
+            logger.info("consumer--:"+message.getMessageProperties()+":"+new String(message.getBody()));
+            //成功消费,消息从队列中删除
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        }catch(Exception e){
+            //requeue=true,消息重新进入队列,false被删除
+            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
+        }
+    }
+}

+ 45 - 0
src/main/java/com/miyzh/rabbitMQ/MsgReceiver.java

@@ -0,0 +1,45 @@
+package com.miyzh.rabbitMQ;
+
+import com.miyzh.config.RabbitConfig;
+import com.rabbitmq.client.Channel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * @Description: 消费者
+ * @Author: lyt
+ * @Date: 2019/6/21 11:37
+ */
+@Component
+@RabbitListener(queues = RabbitConfig.QUEUE_A)
+public class MsgReceiver {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @RabbitHandler
+    public void process(String content, Message message, Channel channel) throws IOException {
+        logger.info("接收处理队列A当中的消息: " + content);
+//        System.out.println("接收处理队列A当中的消息: " + content);
+        try {
+//            int a = 1 / 0;
+            System.out.println("消费消息:" + content);
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
+            System.out.println("消费消息确认" + message.getMessageProperties().getConsumerQueue() + ",接收到了回调方法");
+        } catch (Exception e) {
+            //重新回到队列
+            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
+            System.out.println("尝试重发:" + message.getMessageProperties().getConsumerQueue());
+            //requeue =true 重回队列,false 丢弃
+//            channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
+            // TODO 该消息已经导致异常,重发无意义,自己实现补偿机制
+
+
+        }
+    }
+}

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

@@ -0,0 +1,77 @@
+spring:
+  application:
+    name: yideb-proxy-srv
+#druid数据源相关配置配置
+  datasource:
+    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements
+    username: root
+    password: root
+    driver-class-name: com.mysql.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+
+    #连接池的配置信息
+    initialSize: 5
+    minIdle: 5
+    maxActive: 20
+    maxWait: 60000
+    timeBetweenEvictionRunsMillis: 60000
+    minEvictableIdleTimeMillis: 300000
+    validationQuery: SELECT 1 FROM DUAL
+    testWhileIdle: true
+    testOnBorrow: false
+    testOnReturn: false
+    poolPreparedStatements: true
+    maxPoolPreparedStatementPerConnectionSize: 20
+    filters: stat,wall,log4j
+    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+
+
+  #redis配置数据
+#  redis:
+#    hostName: 192.168.140.131
+#    hostName: 47.104.236.202
+#    port: 6379
+#    password: 123456
+    #  连接超时时间
+#    timeout: 5000
+#    jedis:
+#      pool:
+#    最大连接数(使用负值表示没有限制)
+#        max-active: 10
+#    连接池最大阻塞等待时间(使用负值表示没有限制)
+#        max-wait: -1
+#      连接池中最大空闲连接(使用负值表示没有限制)
+#        max-idle: 2
+#      连接池中最小空闲连接
+#        min-idle: 0
+    # 下面为连接池的补充设置,应用到上面所有数据源中
+    # 初始化大小,最小,最大
+
+  rabbitmq:
+    host: 47.95.29.209
+    port: 5672
+    username: admin
+    password: admin
+    listener:
+      simple:
+        #并发消费者的初始化值
+        concurrency: 10
+        #并发消费者的最大值
+        max-concurrency: 20
+        #每个消费者每次监听时可拉取处理的消息数量
+        prefetch: 5
+        #必须配置这个才会确认回调
+    publisher-confirm-type: correlated
+#    publisher-confirms: true
+    publisher-returns: true
+#mybatis 配置信息
+mybatis:
+  type-aliases-package: com.miyzh.domain
+  mapperLocations: classpath:/mappers/**/*.xml
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+server:
+  port: 18080
+
+
+

+ 220 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+
+    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
+    <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
+    <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
+
+
+    <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
+        debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+    <!-- 定义日志文件 输入位置 -->
+    <property name="log_dir" value="/opt/yideb-proxy-srv/logs"/>
+    <!-- 日志最大的历史 30天 -->
+    <property name="maxHistory" value="30"/>
+
+    <!-- ConsoleAppender 控制台输出日志 -->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <!--过滤掉所有低于INFO级别的日志。-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <!-- 对日志进行格式化 -->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!-- ERROR级别日志 -->
+    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志输出位置  可相对、和绝对路径 -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>
+            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
+            则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+
+        <!--&lt;!&ndash; 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。  &ndash;&gt;-->
+        <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
+        <!--<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>-->
+        <!--<minIndex>1</minIndex>-->
+        <!--<maxIndex>3</maxIndex>-->
+        <!--</rollingPolicy>-->
+        <!--&lt;!&ndash; 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动  &ndash;&gt;-->
+        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
+        <!--<maxFileSize>5MB</maxFileSize>-->
+        <!--</triggeringPolicy>-->
+
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="ERROR"/>-->
+    <!--</appender>-->
+
+    <!-- WARN级别日志 appender -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_WARN" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="WARN"/>-->
+    <!--</appender>-->
+
+
+    <!-- INFO级别日志 appender -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录INFO级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_INFO" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="INFO"/>-->
+    <!--</appender>-->
+
+
+    <!-- DEBUG级别日志 appender -->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录DEBUG级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash; 异步输出 &ndash;&gt;-->
+    <!--<appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="DEBUG"/>-->
+    <!--</appender>-->
+
+
+    <!-- TRACE级别日志 appender -->
+    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录ERROR级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>TRACE</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash; 异步输出 &ndash;&gt;-->
+    <!--<appender name="ASYNC_TRACE" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="TRACE"/>-->
+    <!--</appender>-->
+
+
+    <!-- root级别   DEBUG -->
+    <root level="DEBUG">
+        <!-- 控制台输出 -->
+        <appender-ref ref="CONSOLE"/>
+        <!-- 文件输出 -->
+        <appender-ref ref="ERROR"/>
+        <appender-ref ref="WARN"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="DEBUG"/>
+        <appender-ref ref="TRACE"/>
+        <!--&lt;!&ndash; 文件异步输出 &ndash;&gt;-->
+        <!--<appender-ref ref="ASYNC_ERROR"/>-->
+        <!--<appender-ref ref="ASYNC_WARN"/>-->
+        <!--<appender-ref ref="ASYNC_INFO"/>-->
+        <!--<appender-ref ref="ASYNC_DEBUG"/>-->
+        <!--<appender-ref ref="ASYNC_TRACE"/>-->
+    </root>
+</configuration>

+ 29 - 0
src/main/resources/mybatis/mybatis-config.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <!-- 设置运行参数 -->
+    <settings>
+        <!-- 全局映射器启用缓存 -->
+        <setting name="cacheEnabled" value="true" />
+        <!-- 查询时,关闭关联对象及时加载以提高性能 -->
+        <setting name="lazyLoadingEnabled" value="false" />
+        <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
+        <setting name="aggressiveLazyLoading" value="false" />
+        <!-- 对于位置的SQL查询,允许返回不同的结果集以达到通用的效果 -->
+        <setting name="multipleResultSetsEnabled" value="true" />
+        <!-- 允许使用列标签代替列明 -->
+        <setting name="useColumnLabel" value="true" />
+        <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值), 数据表的pk生成策略将被覆盖 -->
+        <setting name="useGeneratedKeys" value="true" />
+        <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
+        <setting name="autoMappingBehavior" value="PARTIAL" />
+        <!-- 对于批量更新操作缓存SQL以提高性能 -->
+        <setting name="defaultExecutorType" value="REUSE" />
+        <!-- 数据库超过25000秒仍未响应则超时 -->
+        <setting name="defaultStatementTimeout" value="25000" />
+        <!-- 打印查询语句,如果将它注释,你的sql就可以打印进日志;如果将它放开,你的sql就打印到了控制台 -->
+        <!-- <setting name="logImpl" value="STDOUT_LOGGING" /> -->
+    </settings>
+</configuration>

+ 60 - 0
src/main/resources/mybatis/mybatis-generator.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<generatorConfiguration>
+
+    <context id="DB2Tables" targetRuntime="MyBatis3">
+        <!--覆盖生成XML文件,1.3.7及之后-->
+        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
+        <commentGenerator>
+            <property name="javaFileEncoding" value="UTF-8"/>
+            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
+            <property name="suppressAllComments" value="true" />
+            <property name="suppressDate" value="true" />
+        </commentGenerator>
+        <!--数据库链接地址账号密码-->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://localhost:3306/test"
+                        userId="root"
+                        password="root">
+        </jdbcConnection>
+        <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+        <!--生成Model类存放位置-->
+        <javaModelGenerator targetPackage="com.daohe.financeplus.domain.auto" targetProject="src/main/java">
+            <property name="enableSubPackages" value="true"/>
+            <property name="trimStrings" value="true"/>
+        </javaModelGenerator>
+        <!--生成映射文件存放位置-->
+        <sqlMapGenerator targetPackage="mappers.auto" targetProject="src/main/resources">
+            <property name="enableSubPackages" value="true"/>
+        </sqlMapGenerator>
+        <!--生成Dao类存放位置-->
+        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
+                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
+                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
+                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
+        -->
+        <javaClientGenerator type="XMLMAPPER" targetPackage="com.daohe.financeplus.mapper.auto" targetProject="src/main/java">
+            <property name="enableSubPackages" value="true"/>
+        </javaClientGenerator>
+        <!--生成对应表及类名-->
+        <table tableName="tb_newbee_mall_order" domainObjectName="Order">
+            <generatedKey column="id" sqlStatement="Mysql" identity="true" />
+        </table>
+        <!--<table tableName="notice"-->
+               <!--domainObjectName="Notice"-->
+               <!--enableCountByExample="false"-->
+               <!--enableUpdateByExample="false"-->
+               <!--enableDeleteByExample="false"-->
+               <!--enableSelectByExample="false"-->
+               <!--selectByExampleQueryId="false">-->
+            <!--&lt;!&ndash;<columnOverride column="power_type" jdbcType="TINYINT" javaType="java.lang.Integer"/>&ndash;&gt;-->
+        <!--</table>-->
+    </context>
+</generatorConfiguration>
+        <!-- CMD下执行 -->
+        <!-- mvn install:install-file -Dfile=D:/workspace-zxpt-trunk/zxpt/zxpt-mybatis-generator/target/zxpt-mybatis-generator-1.0-SNAPSHOT.jar -DgroupId=zxpt -DartifactId=zxpt-mybatis-generator -Dversion=1.0-SNAPSHOT -Dpackaging=jar -->
+        <!-- ta-mybatis-generator 工程上右键->Run As->Maven Build打开窗口后在Goals栏填写: mybatis-generator:generate -->
+        <!-- 然后run可生成代码 -->

+ 13 - 0
src/test/java/com/miyzh/YidebProxySrvApplicationTests.java

@@ -0,0 +1,13 @@
+package com.miyzh;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class YidebProxySrvApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 30 - 0
src/test/java/com/miyzh/rabbit/RabbitTest.java

@@ -0,0 +1,30 @@
+package com.miyzh.rabbit;
+
+import com.miyzh.YidebProxySrvApplication;
+import com.miyzh.rabbitMQ.MsgProducer;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: lyt
+ * @Date: 2019/6/21 13:34
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = YidebProxySrvApplication.class)
+public class RabbitTest {
+
+    @Autowired
+    private MsgProducer msgProducer;
+
+    @Test
+    public void testRabbit(){
+        String msg = "现在时间是:" + new Date();
+        msgProducer.sendMsg(msg);
+    }
+}