spring cloud alibaba 完整实现 基础结构及nacos配置

Posted 邋遢道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud alibaba 完整实现 基础结构及nacos配置相关的知识,希望对你有一定的参考价值。

前言

        前段时间本来只是想搭建一个最新的spring cloud alibaba 集成 sentinel的环境,去验证一些新的功能问题,结果遇到版本问题,也是面向百度编程,各种老博客,完全不适用,没有看到合适的解决办法。后来只能自己测试解决问题:spring cloud alibaba集成sentinel及版本问题处理_邋遢道的博客-CSDN博客

也是一样的,做其他问题校验集成其他组件也是各种各样的奇葩问题,甚至还有mybatis不可用,唉。相信也有朋友遇到过和我一样的问题,索性我从新完整搭建一个新的,实现一些基本的功能,一方面是记录经验,另一方面也是方便自己以后搭建框架时候使用,因为有些博客可能也不是特别详细。还是靠自己吧

环境准备

        本次使用的环境是:idea 2020.1+mysql 5.7+maven 3.6.3+jdk1.8

        

项目创建

        

 1. 首先创建一个maven项目

下图是创建完成的结构,因为spring cloud alibaba,各个项目最好统一管理,所以我把src目录删除,只作为父项目统一管理

 

 

2.创建子项目,和第一步一样的选择maven,我这儿创建了一个用户管理:user-manage,和一个日志管理:loggin-manage  结构如下

 

3.先对父pomx.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>org.example</groupId>
    <artifactId>spring-cloud-alibaba-project</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>user-manage</module>
        <module>loggin-manage</module>
    </modules>

    <!-- 自定义版本-->
    <properties>
        <!--这个名称最好不要改,后面的子pom会用这种格式去找,改了就找不到了,非要改子pom引用对应依赖就必须要指定版本-->
        <spring-cloud.version>2021.0.0</spring-cloud.version>
        <spring-boot.version>2.6.2</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
        <mybatis.plus.version>3.4.2</mybatis.plus.version>
    </properties>

    <!--公用依赖信息-->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--spring boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--由于SpringCloud Feign在Hoxton.M2 版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <!--不添加依赖,让子pom继承使用-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>$mybatis.plus.version</version>
            </dependency>
            <!-- spring-boot 相关依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>$spring-boot.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-cloud 相关依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>$spring-cloud.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-cloud-alibaba 相关依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>$spring-cloud-alibaba.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-boot-starter-web 相关依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>$spring-boot.version</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <target>1.8</target>
                    <source>1.8</source>
                    <encoding>UTF-8</encoding>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

这里面的全局依赖需要注意下,mybatis plus,lombok,mysql java链接,spring boot web,open feign

有个版本问题,就是feign高版本需要排除ribbon ,引入spring-cloud-loadbalancer

4. 向user管理模块中新增用户查询的代码,结构如下

 先看 application.yml

server:
  port: 8881 #自定义端口

spring:
  application:
    name: user-service #项目名称
  main:
    allow-circular-references: true #2.6.0后默认不允许 允许循环依赖
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myalibaba
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #本地nacos地址

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml #mapper扫描路径
  type-aliases-package: com.andy.user.entity

  mysql的脚本就不贴了,很简单的一个用户表,名称,年龄,性别啥的

然后实现对应的增删改查,主要贴一下dao 和mapper

UserInfoDao.java

package com.andy.user.dao;

import com.andy.user.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper//mapper声明
@Repository//mapper是mybatis的,spring不会去生成bean,所以加上该注解,交给spring管理生成
public interface UserInfoDao 
    boolean saveUser(UserInfo userInfo);
    boolean updateUser(UserInfo userInfo);
    boolean deleteUser(UserInfo userInfo);
    List<UserInfo> queryUserAll();

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="com.andy.user.dao.UserInfoDao">

    <resultMap id="user" type="com.andy.user.entity.UserInfo">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="age" property="age" />
        <result column="sex" property="sex" />
    </resultMap>

    <insert id="saveUser" parameterType="com.andy.user.entity.UserInfo">
        insert into user_info(user_name,age,sex) values(#userName,#age,#sex);
    </insert>

    <update id="updateUser" parameterType="com.andy.user.entity.UserInfo">
        update user_info set user_name = #userName,age = #age,sex = #sex) where id = #id
    </update>

    <delete id="deleteUser" parameterType="com.andy.user.entity.UserInfo">
        delete user_info where id = #id
    </delete>

    <select id="queryUserAll" resultMap="user">
        select * from user_info
    </select>

</mapper>

 完整结构及代码:

 好了,到现在关于用户模块就已经创建完成,但是现在启动还会报错,因为nocas还没有安装

下载地址:Releases · alibaba/nacos · GitHub   注意版本问题,

版本地址说明

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

因为我的alibaba版本是2.2.7,所以下载nocas要看下版本选择2.0.3,不然启动也会报找不到nacos

用上面的下载地址下载完成后解压

1.打开conf,新建一个nocas数据库我的叫my-nocas(自己随便定义,不过记得下面改的时候要同一),把数据库脚本运行一下:nacos-mysql.sql

2. 然后打开application.properties  ,把数据库链接信息改一下

 3. 打开bin目录 编辑 startup.cmd  (windows环境,linux改startup.sh)

set MODE="standalone"   本地测试,单机模式,如果你是集群可以不用改这个文件

 

 5.改完了就双击启动nacos 

 6. 打开浏览器访问:localhost:8848/nacos  用户名密码默认都是nacos,登录

 

 7. 没有问题就可以启动项目了

启动成功,刷新nacos,可以看到服务,那么spring cloud alibaba集成nacos已经完成

 自行测试编写的用户相关接口调用

补充:

         这个项目的service有些朋友没有,先启动项目,然后在idea >> view>> Tool Windows下面

 选择service,然后点击add service   run configuration Type

 再选到spring boot 就有了

好了,本章先到这儿,就完成了基本框架搭建,集成nacos+mybatis plus,下一章我们再继续完善这个项目

以上是关于spring cloud alibaba 完整实现 基础结构及nacos配置的主要内容,如果未能解决你的问题,请参考以下文章

从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十四) spring boot/cloud +logback/log4j2 集成skywalking日志完整配置

当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleut

Spring Cloud Alibaba(15)---Sleuth+Zipkin

Spring Cloud Alibaba全家桶——Spring Cloud Alibaba介绍

Spring Cloud Alibaba

2.Spring Cloud Alibaba实现负载均衡-Ribbon