精华内容
下载资源
问答
  • spring boot demo

    2018-01-09 13:22:56
    spring boot demo;好的spring入门demo;快速开始springboot spring boot demo;好的spring入门demo;快速开始springboot spring boot demo;好的spring入门demo;快速开始springboot spring boot demo;好的spring...
  • Spring Boot Demo

    2018-05-09 21:00:09
    这是我学习 Spring Boot 时自己写的小Demo 简单使用
  • 这是一个基于Spring Boot的简单demo,希望读者可以通过这篇文章大概能看懂这一个简单的框架搭建。后续我会陆续更新,微服务架构(Spring BootSpring Cloud)、分布式架构(Dobbo+Zookeeper)、大数据架构以及源码...

    Spring Boot的设计目的是来简化新Spring应用的初始搭建以及开发过程,大大减少了代码量,通过这篇文章你可以清楚的看到。这是一个基于Spring Boot的简单demo,希望读者可以通过这篇文章大概能看懂这一个简单的框架搭建。后续我会陆续更新,微服务架构(Spring Boot、Spring Cloud)、分布式架构(Dobbo+Zookeeper)以及源码解析等相关的文章,感兴趣的话可以关注一下。

    在这里插入图片描述

    1、项目依赖

      POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

    <?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.boot.demo</groupId>
        <artifactId>bootdemo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>bootdemo</name>
        <description>Demo project for Spring Boot</description>
    
    	<!--父项目依赖-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
    
    	<!--构建设置-->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
    	<!--项目依赖-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    		
    		<!--mybatis和tk.mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>2.0.4</version>
            </dependency>
    		
    		<!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.13</version>
            </dependency>
    		
    		<!--自动生成getter,setter,equals,hashCode和toString等等-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.20</version>
                <scope>provided</scope>
            </dependency>
    
            <!--添加jsp依赖 -->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    2、配置文件

      Spring Boot配置文件有两种:application.yml和application.properties,作用是一样的,不过因为yml文件是树状结构,写起来有更好的层次感,更易于理解,所以很多人都选择了yml文件。

    #配置数据源
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/testdb?characterEncoding=utf8
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
      mvc:
        view:
          prefix: /WEB-INF/
          suffix: .jsp
    
    #配置mybatis
    mybatis:
      typeAliasesPackage: com.boot.demo.bootdemo.domain
      mapper-locations: classpath:mapper/*.xml
    
    #配置mapper
    mapper:
      not-empty: false
      identity: MYSQL
    
    #配置Tomcat,配置80,可在浏览器访问项目时不用加端口号(默认端口8080)
    server:
      port: 80
    

    3、Java Bean

      Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

    @Data
    @Table(name = "user")
    public class User {
        @Id
        @KeySql(useGeneratedKeys = true)
        private Long id;
        private String name;
        private Date createDate;
    }
    

    4、自定义Mapper

      Tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效。这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种方法来实现sql语句的效果。对于单表查询不需要写SQL语句,这样就不用像mybatis那样每次写一个接口就要写一条sql语句。这样大大减少了我们的工作量。

    public interface MyMapper<T> extends BaseMapper<T>, MySqlMapper<T> {
    }
    
    

    5、UserMapper和UserMapper.xml

      通用mapper可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。例如:第三种方式。

    @Mapper
    public interface UserMapper extends MyMapper<User> {
        //第一种方式,注解sql,方便,但维护性略差
        @Select("select * from user")
        List<User> selectAll();
    
        //第二种方式,xml方式,易维护
        int save(User user);
    
        //第三种方式:通用mapper,本身提供了很多现成的增删改查sql,方法不在文件中体现;例如:int deleteByPrimaryKey()
    }
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.boot.demo.bootdemo.mapper.UserMapper">
        <!--第一种方式,注解sql在方法上-->
        <!--第二种方式对应的sql-->
        <insert id="save" parameterType="User" >
            insert into user (id, name, create_date)
            values (#{id}, #{name}, #{createDate})
        </insert>
        <!--第三种方式,是通用mapper现成的增删改查sql,不用在文件中体现-->
    </mapper>
    

    6、服务实现类

      @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

    @Service
    public class UserService {
        @Resource
        private UserMapper userMapper;
    
        //第一种方式对应的Service
        public List<User> listAll() {
            return userMapper.selectAll();
        }
    
        //第二种方式对应的Service
        public int saveUser(User user) {
            return userMapper.save(user);
        }
    
        //第三种方式对应的Service,通用mapper,直接调用现成的增删改查sql
        public int delUser(Long id) {
            return userMapper.deleteByPrimaryKey(id);
        }
    }
    

    7、控制层

      @RestController注解相当于@ResponseBody + @Controller合在一起的作用。如果要返回json内容,就用@RestController,如果要返回到指定页面,就用@Controller。

    @Controller
    public class UserController {
        @Resource
        private UserService userService;
    
        //第一种方式对应的Controller
        @GetMapping(value = "/listUser")
        @ResponseBody
        public List<User> listAll() {
            return userService.listAll();
        }
    
        //第二种方式对应的Controller
        @PostMapping(value = "/saveUser")
        @ResponseBody
        public String saveUser(HttpServletRequest request) {
            User user = new User();
            user.setName(request.getParameter("username"));
            user.setCreateDate(new Date());
            return userService.saveUser(user)==1?"SUCCESS":"FAIL";
        }
    
        //第三种方式对应的Controller
        @GetMapping(value = "/delUser")
        @ResponseBody
        public String delUser(HttpServletRequest request) {
            Long id = Long.parseLong(request.getParameter("id"));
            return userService.delUser(id)==1?"SUCCESS":"FAIL";
        }
    
        //跳转到主页
        @GetMapping(value = "index")
        public String index(){
            return "index";
        }
    
        //跳转到登录页面
        @GetMapping(value = "login")
        public String login(){
            return "login";
        }
    }
    

    8、数据库建表

    在这里插入图片描述

    9、编写主页面

      很简易的界面,大家可以好好写一下,相信你们比我写的界面好看多了,哈哈。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>主页</title>
    </head>
    <body>
        <form action="saveUser" method="post">
            姓名:<input type="text" name="username"/>
                  <input type="submit" value="添加"/>
        </form>
    </body>
    </html>
    

    10、项目启动类

      @SpringBootApplication注解实际上是SpringBoot提供的一个复合注解。@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。(注意,@MapperScan要用的依赖包是tk.mybatis.spring.annotation.MapperScan,而不是 org.mybatis.spring.annotation.MapperScan,这是一个大坑!)。

    package com.boot.demo.bootdemo;
    
    import tk.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan("com.boot.demo.bootdemo.mapper")
    public class BootdemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BootdemoApplication.class, args);
        }
    
    }
    
    
    

    11、启动Spring Boot项目

    浏览器打开主页,http://localhost/index。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
      到此,从前端请求后端服务通了!有没有发现Spring Boot框架大大减少了代码量,感兴趣的话可以去学习下。
      想要demo源码的可以留下邮箱地址。或者自行下载(Github地址)。

    Mybatis那种XML配置真的很麻烦,可以来试试MybatisPlus,使用起来真的舒服!现在企业用后者多一些。
    点击这里跳转:【Spring Boot实战与进阶】集成Mybatis-Plus的实例详解

    展开全文
  • spring-boot-demo

    2018-04-12 16:16:31
    spring-boot-demospring-boot-demospring-boot-demospring-boot-demospring-boot-demospring-boot-demo
  • 54个spring boot demo

    2019-11-18 16:43:18
    54个spring boot demo,大量spring boot示例。包含jpa、mybatis、template、websocket、mq、log等。
  • Spring boot demo

    2017-08-30 17:46:34
    Spring boot,基于gradle构建,数据库:postgres,数据成:Spring data jpa
  • spring-boot Demo

    2018-11-22 10:29:11
    spring-bootdemo,压缩包,解压后可以在项目中简单的运行起来
  • demo-spring-boot:Spring启动演示
  • Spring-boot jsp demo

    2018-02-25 23:05:06
    Spring-boot jsp demo Spring-boot jsp demo Spring-boot jsp demo
  • 本文介绍了在spring boot如何使用spring security,spring security的基本配置。如何实现自定义登录,自定义登录成功处理,自定义登录失败处理。
  • spring-boot demo index.html

    2018-03-07 11:37:28
    spring-boot demo 基础结构 基础结构 基础结构基础结构
  • graphql+spring-boot demo

    2021-03-08 22:32:14
    graphql整合spring-boot demo已经使用示例
  • 演示弹簧引导弹簧会话 使用 Spring Session 演示 Spring Boot
  • spring boot web demo

    2020-05-18 16:47:51
    spring boot web demo
  • Spring Boot Demo 系列

    千次阅读 2017-10-07 19:52:57
    Java spring boot 学习与总结,以案例Demo的的形式记录spring boot 的相关的专题知识,最开始以实现为主,之后再深入地探究相关专题的原理。如果你有好的Demo或见解,欢迎pull request 给我哦,共同进步!!如果觉得...

    项目地址:https://github.com/whirlys/SpringBootDemos

    Java spring boot 学习与总结,以案例Demo的的形式记录spring boot 的相关的专题知识,最开始以实现为主,之后再深入地探究相关专题的原理。

    如果你有好的Demo或见解,欢迎pull request 给我哦,共同进步!!

    如果觉得不错,欢迎你给个 star ^_^


    学习资料来源

    1. 自己捣鼓的小Demo
    2. 书籍《深入实践SpringBoot_陈韶健》,《JavaEE开发的颠覆者 Spring Boot实战 完整版》等
    3. 慕课网 http://www.imooc.com/
    4. github https://github.com/timebusker/spring-boot
    5. spring 官方文档 spring.io
    6. spring boot 的samples https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
    7. github https://github.com/zccodere/study-imooc

    摘抄的部分我会尽可能地保留出处。


    项目名称描述
    spring-boot-girl整合了 Spring Boot 中的Controller ,数据库操作,@Valid 表单验证,AOP ,统一异常处理, 单元测试 的完整的Demo
    spring-boot-dbspring boot 分别连接四种不同的数据库:mysql, redis, mongodb,neo4j,并进行单元测试
    oauthOAuth2.0 授权标准简介
    Echarts百度的数据库可视化JS库Echarts的使用
    seckillJava 高并发 使用 SpringMVC+Spring+MyBatis 实现高并发秒杀API
    java-jmsJava消息中间件简介,java spring使用activeMQ以及activeMQ集群的Demo
    spring-aop面向切面编程(AOP)
    Java实现SSO单点登录
    Dwr实现JAVA服务器端向客户端p推送消息
    Java定时任务调度工具Quartz详解
    ElasticSearch入门
    展开全文
  • spring boot protobuf demo

    2017-07-05 16:45:03
    spring boot protobuf demo
  • Spring Boot Java Demo

    2017-01-22 20:49:46
    Spring Boot Demo,解压可运行
  • spring boot+spring cloud+Eureka微服务demo

    千次阅读 2018-06-05 14:18:58
    首先讲一个一定要注意的细节,spring bootspring cloud的版本并不是完全兼容的。具体的兼容性可以参照官网 兼容性查询 如果不兼容就会出现以下错误 1.编写Eureka服务microservices-discovery-eureka-demo ...

    首先讲一个一定要注意的细节,spring boot和spring cloud的版本并不是完全兼容的。具体的兼容性可以参照官网
    兼容性查询
    如果不兼容就会出现以下错误
    这里写图片描述

    1.编写Eureka服务microservices-discovery-eureka-demo

    1.1新建spring boot项目

    我这里用的idea新建spring boot项目,选择Spring Initializr,大家也可以在https://start.spring.io上创建再导入本地即可。
    这里写图片描述
    大家根据实际情况修改group等相关信息。
    这里写图片描述
    这里注意右上角的spring boot的版本选择。
    这里写图片描述
    最后直接点击完成即可。
    这里写图片描述
    创建完后首先打开pom.xml看看,然后对照加入相关依赖,其中dependencyManagement可以从官网拷贝过来。http://projects.spring.io/spring-cloud/
    注意选择的spring cloud和spring boot的兼容性。

    <?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.dewey</groupId>
        <artifactId>microservices-discovery-eureka-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>microservices-discovery-eureka-demo</name>
        <description>eureka service</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.13.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>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    然后打开启动类并为其加上@EnableEurekaServer

    package com.dewey.microservicesdiscoveryeurekademo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class MicroservicesDiscoveryEurekaDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MicroservicesDiscoveryEurekaDemoApplication.class, args);
        }
    }
    

    然后配置eureka server,在application.yml文件中加入如下配置,其中registerWithEureka:false表示它不会自己像自己注册,fetchRegistry 为客户端是否获取eureka服务器注册表上的注册信息,默认为true,由于我们是本来就是编写eureka server,所以这里设置为flase不然启动会报错。registerWithEureka: false 和 fetchRegistry: false就代表这是一个eureka server。 当然这里也可以用系统生成的application.properties文件配置,但yaml文件的可读性要优于他,所以这里用了yaml文件配置。

    server:  
      port: 8000
    eureka:  
      instance:  
        hostname: localhost  
      client:  
        registerWithEureka: false 
        fetchRegistry: false 
        serviceUrl:  
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  

    然后我们就可以启动该eureka server了,运行启动类后在浏览器访问https://localhsot:8000/就可以看到微服务查看面板了。
    这里写图片描述

    2.编写服务提供者microservices-provider-demo

    按照上面的创建方式创建项目microservices-provider-demo,然后打开pom.xml对比添加相应依赖。

    <?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.dewey</groupId>
        <artifactId>microservice-provider-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>microservice-provider-demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.13.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>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    然后打开启动类添加@EnableDiscoveryClient注解。

    package com.dewey.microserviceproviderdemo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class MicroserviceProviderDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MicroserviceProviderDemoApplication.class, args);
        }
    }
    

    然后配置该服务的端口,注册的eureka server地址等。

    spring:
      application:
        name: service-provider
    
    server:
      port: 8001
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8000/eureka/ #eureka服务注册地址

    然后编写一个简单的controller。注意编写的controller一定要在启动类目录级别或下层。不然不会加载。

    package com.dewey.microserviceproviderdemo.controller;
    
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    public class HelloWorld {
        @GetMapping("/test/{id}")
        public String test(@PathVariable String id){
            return "hello"+id.toString();
        }
    }c

    这时候启动该项目就可以在eureka server查看面板上看到该服务了。

    3.编写服务提供者microservices-consumer-demo,使用ribbon。

    按照上面的创建方式创建项目microservices-consumer-demo,然后打开pom.xml对比添加相应依赖。

    <?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.dewey</groupId>
        <artifactId>microservice-consumer-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>microservice-consumer-demo</name>
        <description>consumer</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.13.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    然后找到启动类加上@EnableDiscoveryClient,并加入RestTemplate的bean,RestTemplate是spring用来操作rest资源的类,使用了模板模式。同时注意注解@LoadBalanced,只需要这个注解就可以为RestTemplate整合ribbon,从而实现负载均衡。而且eureka和ribbon配合使用时会将服务名自动映射成微服务的网络地址。使得大妈可伸缩性增强。具体见下面controller。

    package com.dewey.microserviceconsumerdemo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class MicroserviceConsumerDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MicroserviceConsumerDemoApplication.class, args);
        }
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    

    最后编写controller,这里restTemplate.getForObject中的url换成http://localhost:8001/test也是可以的,但是这样的话耦合度是比较高的,如果服务提供者的地址发生了变化那这个消费者就不能正常运行了。由于集成了ribbon,所以这里可以换成服务名。

    package com.dewey.microserviceconsumerdemo.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class Test {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/test/{id}")
        public String test(@PathVariable String id){
            return this.restTemplate.getForObject("http://service-hello/test/"+id,String.class);
        }
    }
    

    3.编写服务提供者microservices-consumer-feign-demo,使用feign。

    使用restTemplate实现rest API调用时,在代码中拼接url使得代码不够优美,而且比较长的url会使拼接变得复杂,使用feign来定义接口只需要相应的注解,非常简单易读。便于维护。
    首先修改pom.xml

    <?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.dewey</groupId>
        <artifactId>microservice-consumer-feign-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>microservice-consumer-feign-demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.13.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>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <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.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    创建feign接口。@FeignClient中的name表示服务提供者的名称。注意这里不能用@GetMapping和@PostMapping等,不然会报错。大家可以试试。

    package com.dewey.microserviceconsumerfeigndemo.feign;
    
    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @FeignClient(name="service-provider")
    public interface testFeignClient {
        @RequestMapping(value = "/test/{id}",method = RequestMethod.GET)
        public String test(@PathVariable("id") String id);
    }
    

    配置文件application.yml

    spring:
      application:
          name: client-feign
    
    server:
      port: 8003
    
    eureka:
      client:
        serviceUrl:
              defaultZone: http://localhost:8000/eureka/

    最后编写controller

    package com.dewey.microserviceconsumerfeigndemo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    
    
    @EnableDiscoveryClient
    @SpringBootApplication
    @EnableFeignClients
    public class MicroserviceConsumerFeignDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MicroserviceConsumerFeignDemoApplication.class, args);
        }
    }
    

    启动完成后我们可以通过http://localhost:8003/test/10来验证。
    四个项目打包下载地址,下载即可体验微服务。

    展开全文
  • Spring boot基础demo

    2017-03-28 12:40:27
    spring boot 基础 的demo具体使用请看我的博客。
  • 本项目示例基于spring boot最新版本(2.4.0)实现,Spring BootSpring Cloud学习示例,将持续更新…… 在基于Spring BootSpring Cloud的分布式微服务开发过程中,根据实际项目环境,需要选择,集成符合项目需求...
  • spring boot gradle demo

    2018-11-28 13:37:32
    花50积分下了一个spring demo没法跑,很气,自己看了网上资料弄了一个能用的Spring Boot + gradle demo. ide用的IntelliJ
  • demo-spring-boot.rar

    2020-05-02 11:57:26
    spring boot demo
  • Spring-Boot-demo

    2017-12-14 10:58:38
    Spring-Boot-demo.zip,spring boot案例代码demo。可以直接使用。
  • spring-boot-thymeleaf:simple spring boot thymeleaf demo spring-boot-jpa-thymeleaf-curd:spring boot + jpa + thymeleaf 增删改查示例 spring-boot-rabbitmq:spring boot和rabbitmq各种消息应用案例 spring-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,470
精华内容 41,388
关键字:

bootdemospring

spring 订阅