天道酬勤,学无止境

Springboot(2.2.2)+Mybatis-Plus(3.0-RC3)+shedLock

主要架构选型

Springboot(2.2.2)+Mybatis-Plus(3.0-RC3)+shedLock(4.0.1)

开发注意事项

Q&A

  • 1、 ShedLock 部署时需要创建表 (特别注意不同库创建的sql)

    Mysql:
    CREATE TABLE shedlock(
          name VARCHAR(64), 
          lock_until TIMESTAMP(3) NULL, 
          locked_at TIMESTAMP(3) NULL, 
          locked_by  VARCHAR(255), 
          PRIMARY KEY (name)
      ) 
    
    Oracel:
    DROP TABLE ICC_UNION.SHEDLOCK CASCADE CONSTRAINTS;
    CREATE TABLE SHEDLOCK (
     name VARCHAR2(64 CHAR),
     lock_until TIMESTAMP,
     locked_at TIMESTAMP,
     locked_by  VARCHAR2(255 CHAR),
     PRIMARY KEY (name)
    );

    @SchedulerLock(name = "任务名称 不要重复", lockAtMostFor = "见下", lockAtLeastFor ="见下")

    /**
     *You can also set lockAtMostFor attribute which specifies how long the lock should be kept in case the executing node dies.
     *  This is just a fallback, under normal circumstances the lock is released as soon the tasks finishes.
     *  You have to set lockAtMostFor to a value which is much longer than normal execution time.
     *  If the task takes longer than lockAtMostFor the resulting behavior may be unpredictable
     *  (more then one process will effectively hold the lock).
     *  lockAtMostFor:锁的最大时间单位为毫秒
     *
     *Lastly, you can set lockAtLeastFor attribute which specifies minimum amount of time for which the lock should be kept.
     *  Its main purpose is to prevent execution from multiple nodes in case of really short tasks and clock difference between the nodes.
     *  lockAtLeastFor:锁的最小时间单位为毫秒
     */

项目ShedLock地址

pom主要jar引用


 <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0-RC3</version>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.14</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.6.0.RELEASE</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-spring</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-provider-jdbc-template</artifactId>
            <version>4.0.1</version>
        </dependency>

SchedLockConfig 主要配置

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.sql.DataSource;

/**
 * @author nopsmile
 * defaultLockAtMostFor 指定在执行节点结束时应保留锁的默认时间使用ISO8601 Duration格式
 * 作用就是在被加锁的节点挂了时,无法释放锁,造成其他节点无法进行下一任务
 * 这里默认30s
 * 关于ISO8601 Duration格式用的不到,具体可上网查询下相关资料,应该就是一套规范,规定一些时间表达方式
 */
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "30s")
public  class SchedLockConfig {

    @Bean
    public LockProvider lockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(dataSource);
    }

}

mybatis主要配置


import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.util.Properties;
/**
 * @author nopsmile
 */
@Configuration
@EnableTransactionManagement
@ComponentScan
//@MapperScan("com.itcc.mva.mapper*")
public class MybatisPlusConfig {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    /**
     * 打印 sql
     */
    @Bean
    @Profile({"test"})// 设置 test 环境开启
    public PerformanceInterceptor performanceInterceptor() {
        logger.info("loading the config of MybatisPlusConfig");
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        //格式化sql语句
        Properties properties = new Properties();
        properties.setProperty("format", "true");
        performanceInterceptor.setProperties(properties);
        return performanceInterceptor;
    }
}

其中job类的

@Component
public class demoJob {
@Scheduled(cron = "0/5 * * * * ?")
    @SchedulerLock(name = "demoJobName", lockAtMostFor = "3s", lockAtLeastFor = "3s")
    public void pushInfo() {
        ...
        }

}

启动类

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@MapperScan("com.mapper")
@SpringBootApplication
public class MvaApplication {

    public static void main(String[] args) {
        SpringApplication.run(MvaApplication.class, args);
    }

}

至此整合完毕。
本案例适用于小型分布式定时任务,不想用框架的。
注意:
多节点需要时间同步,否则会出现任务重复执行问题。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Springboot整合MyBatis-plus:代码生成器
    Springboot整合MyBatis-plus:代码生成器 AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。 一、查看代码目录结构 二、添加依赖 <dependency> <groupId>io.springfox 来源:https://blog.csdn.net/zhengzaifeidelushang/article/details/115277266
  • SpringBoot整合mybatis-plus代码生成器
    1.添加依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.1.2</version> </dependency> <!-- velocity 模板引擎, 默认 --> <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> 2.引入代码生成器的类,修改并运行 package com.ljy.demo; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com
  • 全网最详细MP(mybatis-plus)教程来了(一)常用注解!!!!
    常用注解 一.@TableId二.@TableField三.@TableName MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 点这中文官网 一.@TableId @TableId:专门给主键使用进行映射 ​ @TableId中的一些属性 value,默认就是 type(主键的生成策略 ) AUTO(0), NONE(1), INPUT(2), ASSIGN_ID(3), ASSIGN_UUID(4), 值描述AUTO数据库自增NONE默认值,MP通过雪花算法生成随机数给主键赋值INPUT需要开发者手动赋值ASSIGN_IDMP分配ID,主键可以是Long,Integer,String类型ASSIGN_UUIDMP分配UUID,主键必须是String类型 - NONE 当我们给主键加上@TableId,并且不给属性type赋值,此时默认是用的NONE属性, 当我们执行插入操作时,注意这里的插入操作MP给我么提供的方法的参数是类 MP会通过雪花算法生成一个很大的随机数,set到你的类中的主键属性中,因此 你的id必须设为Long,并且数据库的对应的主键也要设置为合适的长度 - INPUT 当属性为INPUT时
  • 常见问题
    近期整理的初级开发遇到的问题,希望对大家有用。 1、Unsatisfied dependency expressed through field 'baseMapper' 于是在pom.xml中搜索mybatis关键字,发现的确有多个, 把其他有mybatis关键字的都删掉,只留下以下一份mybatis starter <!--mybatis-plus支持 -》 Mybatis-Plus学习官方文档:https://baomidou.oschina.io/mybatis-plus-doc/#/quick-start--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>2.2.0</version> </dependency> 但发现运行后仍然报这个错。 刚开始怀疑是不是这个有问题,又继续定位, 发现baseMapper的确没有映射,于是人工在对象前加上@Mapper @Mapper public interface SkyUserMapper extends BaseMapper<SkyUser> { } 问题搞定。 总结: 那这里就有两个问题,一个是mybatis-plus包是否正确的问题
  • springboot使用mybatis和jdbcTemplate搭建多数据源连接(mysql等)
    源代码下载 链接:https://pan.baidu.com/s/1xXdbLuigUQYUtknaODew8A 提取码:x9jm 文章目录 源代码下载 一 创建springboot项目创建项目添加依赖创建mapper (使用mybatis整合mysql1的数据)创建jdbcTemplate(使用mybatis整合mysql2的数据)使用Test测试 一 创建springboot项目 创建项目 我的IDE是IDEA File->NEW -> Project 选择Spring Initializr 点击next 修改项目名等信息 --> 点击Next 选择 Lombok、Spring Web、JDBC API、MYSQL Driver 、Oracle Driver (我这里是阿里云的镜像 根据自己的镜像选择对应的Dependencies) 添加依赖 创建好后添加多数据源依赖 <!-- druid连接池依赖 --> <!-- 如果使用druid-spring-boot-starter, 那么需要在启动类上使用@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) --> <!-- <dependency>--> <!-- <groupId>com.alibaba</groupId>--> <!--
  • springboot项目整合mybatis基础使用
    在web应用常用的持久层框架有hibernate与mybatis,两个框架都有各自的优缺点,mybatis属于轻量级框架,在互联网行业常使用mybatis作为持久层框架,在springboot项目中引入mybatis-spring-boot-starter可以实现与springboot无缝衔接,降低了框架配置,上手更容易 1.引入maven依赖,springboot web模块、MySQL-jdbc驱动、mybatis-start <?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> <!-- springboot父类 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot
  • Spring Boot2 —— 数据访问
    Spring Boot2数据访问 文章目录 Spring Boot2数据访问一、关系型数据库(SQL)1、数据源的自动配置-HikariDataSource(1)导入JDBC场景(2)分析自动配置原理(3)修改配置项(4)测试 2、使用Druid数据源(1)官方文档(2)自定义方式(3)使用官方Starter方式进行配置 3、整合MyBatis(1)通过配置模式使用MyBatis(2)通过注解模式使用MyBatis(3)配置注解混合使用4、整合MyBatis Plus完成Crud(1)什么是MyBatis-Plus 一、关系型数据库(SQL) 1、数据源的自动配置-HikariDataSource (1)导入JDBC场景 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> 数据库驱动?为什么导入JDBC场景,官方不导入驱动?官方不知道我们接下要操作什么数据库。数据库版本和驱动版本对应 默认版本:<mysql.version>8.0.22</mysql.version> <dependency> <groupId>mysql</groupId> <artifactId>mysql
  • Apache Spark 3.0.0 正式版终于发布了,重要特性全面解析
    Apache Spark 3.0.0 正式版终于发布了,重要特性全面解析 过往记忆大数据 过往记忆大数据原计划在2019年年底发布的 Apache Spark 3.0.0 今天终于赶在下周二举办的 Spark Summit AI 会议之前正式发布了! Apache Spark 3.0.0 自2018年10月02日开发到目前已经经历了近21个月!这个版本的发布经历了两个预览版以及三次投票: •2019年11月06日第一次预览版,参见Preview release of Spark 3.0[1]•2019年12月23日第二次预览版,参见Preview release of Spark 3.0[2]•2020年03月21日 [VOTE] Apache Spark 3.0.0 RC1[3]•2020年05月18日 [VOTE] Apache Spark 3.0 RC2[4]•2020年06月06日 [vote] Apache Spark 3.0 RC3[5]Apache Spark 3.0 增加了很多令人兴奋的新特性,包括动态分区修剪(Dynamic Partition Pruning)、自适应查询执行(Adaptive Query Execution)、加速器感知调度(Accelerator-aware Scheduling)、支持 Catalog 的数据源API(Data Source
  • 02.mybatis-plus通用CRUD--插入insert
    一、通用 CRUD 提出问题 假设已存在一张表tbl_employee,且已有对应的实体类(Employee),实现tbl_employee表的CRUD操作。实现方式: 基于mybatis:需要编写EmployeeMapper接口,并手动编写CRUD方法提供EmployeeMapper.xml映射文件,并手动编写每个方法对应的sql语句。 基于mybatis-plus:只需要创建EmployeeMapper接口,并集成BaseMapper接口。这就是使用mybatis-plus需要完成的所有操作,甚至不需要创建SQL映射文件。 二、插入操作 创建EmployeeMapper接口,继承BaseMapper接口。 import com.baomidou.mybatisplus.mapper.BaseMapper; import com.fzl.mp.beans.Employee; /** * Mapper接口 * * 基于MyBatis:在mapper接口中编写CRUD相关的方法,提供mapper接口所对应的SQL映射文件 以及方法对应的SQL语句。 * * 基于MyBatis-plus:让xxxMapper接口继承BaseMapper接口即可。 * BaseMapper<T>:泛型指定的就是当前Mapper接口所操作的实体类类型。 */ public interface
  • mybatis-plus乐观锁
    主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion 如果version不对,就更新失败 接下来介绍如何在Mybatis-Plus项目中,使用乐观锁: 这里的乐观锁的插件比较旧,目前最新的显示已经过时 @Configuration @MapperScan("com.demomptest.mapper") public class MpConfig { /** * 乐观锁插件 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } } 最新的使用在下面 @Configuration @MapperScan("com.demoptest.mapper") public class Mpconfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){
  • 基于aop注解形式和 mybatis-plus3.4.2实现数据权限控制
    1、实现思路,通过ThreadLocal获取是否开启数据权限,开启则通过mybatis-plus的DataPermissionHandler实现数据权限 controller上添加的注解DataScope.java package com.pojo.common.datascope.annotation; import com.pojo.common.core.config.HkhjDataPermissionHandler; import com.pojo.common.core.utils.DataScopeContext; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 数据权限过滤注解 * * @author zsj */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface
  • Mybatis-Plus使用
    1.使用步骤 1.1导入maven依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>Latest Version</version> </dependency> 1.2 配置文件 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource mybatis-plus.mapper-locations=classpath:/mybatis/mapper/*.xml mybatis-plus.configuration.map-underscore-to
  • Mybatis-Plus 分页插件
    1、分页在网站上使用十分之多! 原始的limit进行分页PageHelper插件MP也内置分页插件 如何使用呢? 1、配置拦截器组件 @MapperScan("com.example.demo.dao") //扫描mapper文件夹 @EnableTransactionManagement //自动管理事务 @Configuration //配置类 public class MyBatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } 2、直接使用 @RequestMapping("/pageInfo") public void pageInfo(){ //参数一:第几页 //参数二:一页有几条数据 Page<Student>page=new Page<>(1,5); studentService.selectPage(page,null); } 3、测试查看效果 来源:https://blog.csdn.net/CSDN_java1005/article/details/115317562
  • MybatisPlus整合
    1.导入依赖 <dependency> <groupId> com.baomidou </groupId> <artifactId> mybatis-plus-boot-starter </artifactId> <version> 3.2.0 </version> </dependency> 2. 导入数据库驱动 https://mvnrepository.com/artifact/mysql/mysql-connector-java <!-- 导入 mysql 驱动 --> <dependency> <groupId> mysql </groupId> <artifactId> mysql-connector-java </artifactId> <version> 8.0.17 </version> </dependency> 3. 在 application.yml 配置数据源相关信息 spring: datasource: username: root password: root url: jdbc:mysql://**** driver-class-name: com.mysql.jdbc.Driver mybatis-plus: # mapper 文件扫描 mapper-locations: classpath*:/mapper/**/*.xml global
  • Spring Security 查询数据库(五)
    目录 一、概述 二、搭建自定义UserDetailsService 1. 添加mybatis-plus , 创建数据表,并添加数据 2. 创建数据库表结构 3. 我们创建自定义 MyUserDetailsServiceImpl 4. SecurityConfig 配置 5. LoginController 页面跳转方法 6. 异常处理信息 三、前端页面配置 1. login.html 登入页面 2. main.html 主页面 3. error.html 错误页面 四、验证效果 五、RememberMe功能实现 六、总结 Spring Security 学习专栏 1. Spring Security 入门学习(一) 2. Spring Security 自定义认证管理器和讲解 (二) 3. Spring Security 接口详解 (三) 4. Spring Security 工作原理 (四) 5. Spring Security 查询数据库(五) 一、概述 下面开始实战使用Spring Security 的实例查询数据库,依然依托上一篇的例子,并在此基础上调整。 通过数据库查询,存储用户和角色实现安全认证 在上一篇的例子中(Spring Security 自定义认证管理器和讲解),我们使用了内存用户角色来演示登录认证。但是实际项目我们肯定是通过数据库完成的。实际项目中
  • 谷粒商城学习日记(26)——三级分类删除
    三级分类删除——逻辑删除 后台处理后台配置改变设置gateway网关路由设置renrenfast,nacos配置中心设置product模块mybatis-plus配置 后台代码修改 前端改变设置tree组件调用后台方法联调 后台处理 后台配置改变 首先需要修改后台配置 设置gateway网关路由 由于我们前端调用是通过网关调用的,首先要修改路由让前端可以正常访问其他模块的接口 设置application.yml spring: cloud: gateway: routes: - id: test_route uri: https://www.baidu.com predicates: - Query=url,baidu - id: qq_route uri: https://www.qq.com predicates: - Query=url,qq - id: product_route uri: lb://gulimall-product predicates: - Path=/api/product/** filters: - RewritePath=/api/(?<segment>.*),/$\{segment} - id: admin_route uri: lb://renren-fast predicates: - Path=/api/** filters: -
  • SpringBoot之使用thymeleaf
    SpringBoot之使用thymeleaf 一 使用thymeleaf步骤 1 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐thymeleaf</artifactId> <!‐‐2.1.6--> </dependency> <!‐‐切换thymeleaf版本--> <properties> <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <!‐‐ 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 ‐‐> <!‐‐ thymeleaf2 layout1‐‐> <thymeleaf‐layout‐dialect.version>2.2.2</thymeleaf‐layout‐dialect.version> </properties> 2 使用thymeleaf 其使用规则在配置类中,只要把HTML页面放在classpath:/templates/下,thymeleaf就会自动进行视图渲染 @ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties {
  • springboot+ajax上传表单(带有图片)
    ajax上传图片 前端(表单)效果图html 和 模板引擎html模板引擎 引入对应的js文件显示添加 后台controllerservice图片上传自定义地址 前端(表单) 效果图 html 和 模板引擎 html <%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/3/15 0015 Time: 17:39 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>商品列表</title> <jsp:include page="/common/backend_common.jsp"/> <jsp:include page="/common/page.jsp"/> <jsp:include page="/template/product/categoryListTemplate2.jsp"/> <jsp:include page="/template/product/productListTemplate.jsp"/> <jsp:include page=
  • Springboot1.5学习16——监控Spring Boot的健康状况的两种方式
    监控Spring Boot的健康状况有两种方式 1. 使用Actuator检查与监控 1.1 使用步骤 1.1.1 在 pom 文件中添加 Actuator 的坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 1.1.2 在全局配置文件中设置关闭安全限制 因为默认的访问安全限制是开启的,所以,没法获取其检查信息,因此需要先关闭安全限制。 在application.properties全局配置文件中加入如下配置 management.security.enabled=false 然后启动程序,在控制台输出如下信息: 这里的诸如/auditevents就是Actuator 能够为我们的健康状态做不同检查的一个URI标记,例如; 1.1.3 通过URI获取springboot的健康状况信息 用/health举例,在浏览器输入网址:http://localhost:8080/health ,页面显示结果如图; status:状态,值UP 为运行,表示当前boot状态运行正常 diskSpace:磁盘空间,status:UP 也是表示状态正常,total表示当前在运行项目的磁盘的总空间
  • Spring Boot 入门
    **一、**Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 2、微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 单体应用:ALL IN ONE 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元; 详细参照微服务文档 3、环境准备 http://www.gulixueyuan.com/ 谷粒学院 环境约束 –jdk1.8:Spring Boot 推荐jdk1.7及以上;java version “1.8.0_112” –maven3.x:maven 3.3以上版本;Apache Maven 3.3.9 –IntelliJIDEA2017:IntelliJ IDEA 2017.2.2 x64、STS –SpringBoot 1.5.9.RELEASE:1.5.9; 统一环境; 1、MAVEN设置; 给maven 的settings.xml配置文件的profiles标签添加 <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk>