springcloud_service 服务提供者

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012946310/article/details/82320260

本项目只是服务注册和发现中心的一个模块,完整项目整合请参考:https://blog.csdn.net/u012946310/article/details/81913874

一,项目结构与代码展示:

这里写图片描述

服务提供者 springcloud_service6010 和 6011 两个代码基本一模一样,只是运行在同一台机器上面有端口的区别而已,所以只展示一个项目的代码

1,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>springcloud_service6010</groupId>
    <artifactId>springcloud_service6010</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud_service6010</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>springcloud_demo</artifactId>
        <groupId>springcloud_demo</groupId>
        <version>0.0.1-SNAPSHOT</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>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>springcloud_demo</groupId>
            <artifactId>springcloud_model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- 整合swagger,方便接口查看 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <finalName>6010</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

2,ServiceApplication6010 启动类

package springcloud.service;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

@MapperScan("springcloud.service.mappers") // 扫码mapper包
@EnableDiscoveryClient  //激活eureka中的DiscoveryClient实现
@SpringBootApplication
public class ServiceApplication6010 {

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

    // 设置@Value注解取值不到忽略(不报错)
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
        c.setIgnoreUnresolvablePlaceholders(true);
        return c;
    }
}

3,MySwagger2Config 工具类

package springcloud.service.swagger;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2 // 开启swagger
public class MySwagger2Config extends WebMvcConfigurerAdapter {

    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()).select()
                // 扫描指定包中的swagger注解
                .apis(RequestHandlerSelectors.basePackage("springcloud.service.controller"))
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/");
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("基础平台 RESTful APIs")
                .description("基础平台 RESTful 风格的接口文档,内容详细,极大的减少了前后端的沟通成本,同时确保代码与文档保持高度一致,极大的减少维护文档的时间。")
                .version("1.0.0")
                .build();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }

}

4,UserMapper 类

package springcloud.service.mappers;


import springcloud.service.model.User;

public interface UserMapper {

    int deleteByPrimaryKey(Integer var1);

    int insertSelective(User var1);

    User selectByPrimaryKey(Integer var1);

}

5,UserMapper.xml

<?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="springcloud.service.mappers.UserMapper">

    <delete id="deleteByPrimaryKey">
        DELETE
        FROM user
        WHERE user_id = #{userId}
    </delete>

    <insert id="insertSelective">
        INSERT INTO user (
          user_name, user_phone, user_address
        )
        VALUES
          (
            #{userName}, #{userPhone}, #{userAddress}
          )
    </insert>

    <resultMap id="selectByPrimaryKeyMap" type="springcloud.service.model.User">
        <result column="user_id" property="userId"/>
        <result column="user_name" property="userName"/>
        <result column="user_phone" property="userPhone"/>
        <result column="user_address" property="userAddress"/>
    </resultMap>
    <select id="selectByPrimaryKey" parameterType="int" resultMap="selectByPrimaryKeyMap">
      select *
      from user
      where user_id = #{userId}
    </select>

</mapper>

6,UserService 类

package springcloud.service.service;


import springcloud.service.model.User;

public interface UserService {

    int deleteByPrimaryKey(Integer var1);

    int insertSelective(User var1);

    User selectByPrimaryKey(Integer var1);

}

7,UserServiceImpl 类

package springcloud.service.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import springcloud.service.mappers.UserMapper;
import springcloud.service.model.User;
import springcloud.service.service.UserService;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int deleteByPrimaryKey(Integer var1) {
        return userMapper.deleteByPrimaryKey(var1);
    }

    @Override
    public int insertSelective(User var1) {
        return userMapper.insertSelective(var1);
    }

    @Override
    public User selectByPrimaryKey(Integer var1) {
        return userMapper.selectByPrimaryKey(var1);
    }
}

8,UserController 类

package springcloud.service.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import springcloud.service.model.User;
import springcloud.service.service.UserService;

/**
 * 服务接口6012:像 eureka 注册所提供的服务
 */
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Value("${source}")
    private String source;
    @Value("${name}")
    private String name;

    @Autowired
    private UserService userService;

    @ResponseBody
    @PostMapping("/addUser")
    public int addUser(@RequestBody User user){ // 对象参数,参数前面需要加上 @RequestBody 注解,不然赋值失败
        log.info("===============${name}=" + name);
        log.info("===============${source}=" + source);
        log.debug("===============addUser");
        return userService.insertSelective(user);
    }

    @ResponseBody
    @GetMapping("/getUserById/{userId}")
    public User getUserById(@PathVariable("userId") Integer userId){
        log.info("===============${name}=" + name);
        log.info("===============${source}=" + source);
        log.debug("===============getUserById");
        return userService.selectByPrimaryKey(userId);
    }
}

9,application.properties 配置文件


server.port=6010
logging.level.root=debug

#应用(服务)名称,如果多个服务集群,该名称应该一样
#spring.application.name=springcloud_service // 不可以使用下划线,改为中划线
spring.application.name=springcloud-service
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://192.168.2.126:6110/eureka/,http://192.168.2.131:6111/eureka/
#自定义服务名称信息
eureka.instance.instance-id=springcloud-service6010
#访问路径可以显示IP地址
eureka.instance.prefer-ip-address=true
#点击status状态栏时,跳转的路径
eureka.instance.status-page-url=http://192.168.2.126:6010/swagger-ui.html

#mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.2.126:3306/springcloud_demo?characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

#mapper文件目录
mybatis.mapper-locations=classpath*:mappers/*.xml

10,bootstrap.properties 配置文件


#获取远程配置
spring.cloud.config.uri=http://192.168.2.126:6310
spring.cloud.config.profile=test

注意:bootstrap.properties ,它和application.properties 文件一样,会被spring boot加载,但是bootstrap.properties 会优先加载。
这里 bootstrap.properties 文件中配置了分布式配置中心的 ip 地址和运行环境 profile,可以直接获取到分布式配置中心配置的内容,上面 UserController 里面的代码

    @Value("${source}")
    private String source;
    @Value("${name}")
    private String name;

就是获取的分布式配置中心的配置信息,仔细查看 application.properties 配置文件里面是没有配置这两个参数的。

二,启动项目并运行展示

上面的服务提供者环境搭建好后就可以运行我们的服务提供者了,服务提供者运行之前还需要先运行我们之前搭建的126:6110 与 131:6111 两个 eureka 注册中心,需要将我们提供者服务注册到注册中心,供消费者来调用。

运行完服务提供者后,再次刷新 eureka 界面展示控制台
这里写图片描述
会发现我们的两个服务提供者已经注册到了 126:6110 与 131:6111 两个 eureka 注册中心,服务名称 Application 就是我们代码中 spring.application.name 所配置的服务名称(将来消费者需要通过此名称调用服务提供者)

#应用(服务)名称,如果多个服务集群,该名称应该一样
#spring.application.name=springcloud_service // 不可以使用下划线,改为中划线
spring.application.name=springcloud-service

,并且鼠标移动至 Status 栏,左下角会显示 swagger 控制台地址,点击进去即可通过 swagger 查看提供者所提供的接口。

swagger 展示界面:
这里写图片描述

到这里,我们的服务提供者就算配置完成了。

猜你喜欢

转载自blog.csdn.net/u012946310/article/details/82320260