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