gradle7.6.1+springboot3.2.4创建微服务工程

目录

一、创建主工程cloud-demo并删除src目录

二、创建子工程user-service/order-service 

三、更改父工程build.gradle文件 

四、子工程使用mybatis框架

 五、子工程使用mybatis-plus框架

六、相关数据库创建

 七、最终目录结构


一、创建主工程cloud-demo并删除src目录

二、创建子工程user-service/order-service 

三、更改父工程build.gradle文件 
plugins {  
	id 'org.springframework.boot' version '3.2.4'  
	id 'io.spring.dependency-management' version '1.1.4'  
}  
  
group = 'com.fafa'  
  
subprojects {  
	apply plugin: 'org.springframework.boot'  
	apply plugin: 'io.spring.dependency-management'  
	apply plugin: 'java'  
	  
	sourceCompatibility = 17  
	targetCompatibility = 17  
	  
	ext {  
		MAVEN_REPO_RELEASE_URL = System.getenv('MAVEN_REPO_RELEASE_URL')  
		MAVEN_REPO_SNAPSHOT_URL = System.getenv('MAVEN_REPO_SNAPSHOT_URL')  
		MAVEN_DEPLOY_USER = System.getenv('MAVEN_DEPLOY_USER')  
		MAVEN_DEPLOY_PASSWORD = System.getenv('MAVEN_DEPLOY_PASSWORD')  
	}  
	  
	repositories {  
		maven { url "https://maven.aliyun.com/nexus/content/groups/public/" }  
		maven {  
			url 'https://maven.aliyun.com/repository/public'  
		}  
		maven { url "https://repo.spring.io/milestone" }  
		maven { url "https://plugins.gradle.org/m2/" }  
		maven {  
			credentials {  
				username MAVEN_DEPLOY_USER  
				password MAVEN_DEPLOY_PASSWORD  
			}  
			url MAVEN_REPO_RELEASE_URL  
		}  
		maven {  
			credentials {  
				username MAVEN_DEPLOY_USER  
				password MAVEN_DEPLOY_PASSWORD  
			}  
			url MAVEN_REPO_SNAPSHOT_URL  
		}  
		mavenCentral()  
	}  
	  
	dependencies {  
		//Spring Boot Web 启动器  
		implementation 'org.springframework.boot:spring-boot-starter-web'  
		  
		compileOnly 'org.projectlombok:lombok'  
		runtimeOnly 'com.mysql:mysql-connector-j'  
		annotationProcessor 'org.projectlombok:lombok'  
		  
		testImplementation 'org.springframework.boot:spring-boot-starter-test' 
	}  
	  
	test {  
		useJUnitPlatform()  
	}  
	  
	sourceSets {  
		main {  
		resources {  
			srcDirs = ['src/main/resources']  
			}  
		}  
	}  
	  
	tasks.withType(JavaCompile) {  
		options.encoding = "UTF-8"  
		doLast {  
			copy {  
				from sourceSets.main.resources  
				into "$buildDir/resources/main"  
			}  
		}  
	}  
}
四、子工程使用mybatis框架
  • build.gradle

group = 'com.fafa.order'  
version = '1.0'  
description = "order-service"  
  
apply plugin: 'application'  
  
dependencies {  
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' 
}
  • application.yml 

server:  
	port: 8084  
  
spring:  
	datasource:  
		url: jdbc:mysql://localhost:3306/db_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC  
		username: root  
		password: 123456  
mybatis:  
	mapper-locations: classpath:/mappers/**/*.xml  
	type-aliases-package: com.fafa.order.entity
  • OrderMapper.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.fafa.order.mapper.OrderMapper">  
		<resultMap type="Order" id="orderResult">  
		<result property="orderId" column="order_id"/>  
		<result property="orderName" column="order_name"/>  
		<result property="goodsId" column="goods_id"/>  
		<result property="summary" column="summary"/>  
	</resultMap>  
  
	<sql id="selectOrderVo">  
		select * from order_info  
	</sql>  
	  
	<select id="getAll" parameterType="Order" resultMap="orderResult">  
		<include refid="selectOrderVo"/>  
		<where>  
			<if test="orderName != null ">and order_name like concat('%', #{orderName}, '%')</if>  
		</where>  
		order by order_id desc  
	</select>  
</mapper>
  • Order.java 

package com.fafa.order.entity;  
import lombok.Data;  
  
@Data  
public class Order {  
	private int orderId;  
	private String orderName;  
	private int goodsId;  
	private int summary;  
}
  • OrderMapper.java 

package com.fafa.order.mapper;    
import com.fafa.order.entity.Order;  
import org.apache.ibatis.annotations.Mapper;   
import java.util.List;  
  
@Mapper  
public interface OrderMapper {  
	public List<Order> getAll(Order order);  
}
  • IOrderService.java 

package com.fafa.order.service;  
import com.fafa.order.entity.Order;  
import java.util.List;  
  
public interface IOrderService {  
	List<Order> getAll(Order order);  
}
  • OrderService.java 

package com.fafa.order.service;  
import com.fafa.order.entity.Order;  
import com.fafa.order.mapper.OrderMapper;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
import java.util.List;  
  
@Service  
public class OrderService implements IOrderService{  
	@Autowired  
	private OrderMapper orderMapper;  
	  
	@Override  
	public List<Order> getAll(Order order) {  
		return orderMapper.getAll(order);  
	}  
}
  • OrderController.java 

package com.fafa.order.controller;  
import com.fafa.order.entity.Order;  
import com.fafa.order.service.IOrderService;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
import java.util.List;  
  
@RestController  
@RequestMapping("/order")  
public class OrderController {  
	@Autowired  
	private IOrderService orderService;  
	  
	@GetMapping("/getAll")  
	public List<Order> getAll(Order order) {  
		return orderService.getAll(null);  
	}  
}
  • OrderApplication.java 

package com.fafa.order;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
public class OrderApplication {  
	public static void main(String[] args) {  
		SpringApplication.run(OrderApplication.class, args);  
	}  
}
  • OrderApplicationTests.java 

package com.fafa.order;  
import com.fafa.order.entity.Order;  
import com.fafa.order.service.IOrderService;  
import org.junit.jupiter.api.Test;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.boot.test.context.SpringBootTest;  
import org.springframework.util.Assert;  
import java.util.List;  
  
@SpringBootTest  
public class OrderApplicationTests {  
	@Autowired  
	private IOrderService orderService;  
	  
	@Test  
	public void getAll(){  
		List<Order> list=orderService.getAll(null);  
		Assert.isTrue(list.isEmpty(),"有数据");  
		list.forEach(System.out::println);  
	}  
}
  • test.http

### getAll  
GET http://localhost:8084/order/getAll  
Accept: application/json
 五、子工程使用mybatis-plus框架

 参考文章:gradle7.6.1+springboot3.2.4+mybatis-plus搭建工程-优快云博客

六、相关数据库创建
create database db_order;  
use db_order;  
  
SET NAMES utf8mb4;  
SET FOREIGN_KEY_CHECKS = 0;  
  
-- ----------------------------  
-- Table structure for order_info  
-- ----------------------------  
DROP TABLE IF EXISTS `order_info`;  
CREATE TABLE `order_info` (  
	`order_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID',  
	`order_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单名称',  
	`goods_id` bigint NULL DEFAULT NULL COMMENT '商品ID',  
	`summary` bigint NULL DEFAULT NULL COMMENT '总额',  
	PRIMARY KEY (`order_id`) USING BTREE  
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单信息' ROW_FORMAT = Dynamic;  
  
SET FOREIGN_KEY_CHECKS = 1;
create database db_user;  
use db_user;  
  
SET NAMES utf8mb4;  
SET FOREIGN_KEY_CHECKS = 0;  
  
-- ----------------------------  
-- Table structure for user_info  
-- ----------------------------  
DROP TABLE IF EXISTS `user_info`;  
CREATE TABLE `user_info` (  
	`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',  
	`user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户名',  
	`sex` tinyint NULL DEFAULT 0 COMMENT '性别 0 未知 1女 2男',  
	PRIMARY KEY (`user_id`) USING BTREE  
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;  
  
SET FOREIGN_KEY_CHECKS = 1;
 七、最终目录结构

<think>嗯,用户现在想了解如何用Nacos、Dubbo3和Spring Boot搭建微服务,并且使用Gradle构建工具。之前已经回答过Dubbo32.0的区别,现在需要指导具体的搭建步骤。首先,用户可能已经有一定的Spring Boot和微服务基础,但可能对Dubbo3和Nacos的集成不太熟悉。需要明确步骤,包括环境准备、配置、服务定义、注册与发现,以及测试。 要考虑用户可能遇到的问题,比如依赖项的版本兼容性,Gradle的配置是否正确,Nacos服务器的启动和配置是否正确。此外,用户可能希望示例代码尽可能详细,特别是服务接口的定义、提供者和消费者的实现,以及如何通过Dubbo调用服务。 需要分步骤讲解,从项目创建、添加依赖、配置Nacos和Dubbo,到编写服务接口、实现类、消费者控制器,最后是测试方法。同时,要提醒用户注意版本匹配,例如Dubbo3需要特定的Spring Boot版本,Nacos的地址配置是否正确,以及如何启动Nacos服务器。可能还需要说明如何通过curl或Postman测试接口,以及检查Nacos控制台确认服务注册情况。 另外,用户可能对Gradle的依赖配置不熟悉,需要给出正确的依赖项,包括Dubbo Spring Boot Starter、Nacos客户端、以及可能的其他相关依赖。还要注意Gradle和Maven在依赖声明上的区别,确保用户不会混淆。 最后,总结关键点和常见问题,帮助用户避免常见的坑,比如端口冲突、版本不匹配、配置错误等。确保步骤清晰,代码示例正确,用户能够按部就班地完成微服务的搭建和测试。</think>以下是使用Nacos+Dubbo3+SpringBoot搭建微服务的完整指南(基于Gradle构建): --- ### 一、环境准备 ```bash # 需要组件及版本建议 JDK 1.8+ SpringBoot 2.7.x Dubbo 3.0.12 Nacos Server 2.1.0 Gradle 7.4+ ``` --- ### 二、项目结构(多模块) ``` my-dubbo-demo/ ├── api/ # 服务接口模块 ├── provider/ # 服务提供者 ├── consumer/ # 服务消费者 └── build.gradle # 根项目配置 ``` --- ### 三、Gradle配置(根build.gradle) ```groovy subprojects { apply plugin: &#39;java&#39; apply plugin: &#39;org.springframework.boot&#39; apply plugin: &#39;io.spring.dependency-management&#39; repositories { mavenCentral() } dependencies { // Dubbo核心依赖 implementation &#39;org.apache.dubbo:dubbo-spring-boot-starter:3.0.12&#39; implementation &#39;org.apache.dubbo:dubbo-registry-nacos:3.0.12&#39; // Nacos客户端 implementation &#39;com.alibaba.nacos:nacos-client:2.1.0&#39; // SpringBoot Web(消费者需要) implementation &#39;org.springframework.boot:spring-boot-starter-web&#39; } } ``` --- ### 四、API模块开发 `api/build.gradle`: ```groovy dependencies { // Dubbo序列化依赖 implementation &#39;org.apache.dubbo:dubbo-serialization-kryo:3.0.12&#39; } ``` 定义接口`UserService.java`: ```java public interface UserService { String getUserById(Long id); } ``` --- ### 五、服务提供者配置 `provider/build.gradle`: ```groovy dependencies { implementation project(&#39;:api&#39;) // 引入接口模块 } ``` `application.yml`配置: ```yaml dubbo: application: name: user-service-provider protocol: name: tri # 使用Triple协议 port: 20880 registry: address: nacos://localhost:8848 config-center: address: nacos://localhost:8848 ``` 服务实现类: ```java @DubboService public class UserServiceImpl implements UserService { @Override public String getUserById(Long id) { return "User-" + id; } } ``` --- ### 六、服务消费者配置 `consumer/build.gradle`: ```groovy dependencies { implementation project(&#39;:api&#39;) } ``` `application.yml`配置: ```yaml dubbo: application: name: order-service-consumer registry: address: nacos://localhost:8848 consumer: check: false # 启动时不检查提供者是否可用 ``` 消费服务示例: ```java @RestController public class OrderController { @DubboReference private UserService userService; @GetMapping("/user/{id}") public String getUser(@PathVariable Long id) { return userService.getUserById(id); } } ``` --- ### 七、启动Nacos服务端 ```bash # 单机模式启动 sh nacos/bin/startup.sh -m standalone ``` 验证控制台:http://localhost:8848/nacos (默认账号nacos/nacos) --- ### 八、测试流程 1. 启动Nacos服务端 2. 启动Provider应用 3. 启动Consumer应用 4. 验证服务注册: ```bash curl http://localhost:8848/nacos/v1/ns/instance/list?serviceName=user-service-provider ``` 5. 调用接口验证: ```bash curl http://localhost:8080/user/123 ``` --- ### 九、关键配置项说明 ```yaml # 高级配置示例 dubbo: metadata-report: # 元数据配置 address: nacos://localhost:8848 protocols: # 多协议支持 - name: tri port: 20880 - name: dubbo port: 20881 provider: timeout: 3000 # 全局超时时间 ``` --- ### 十、常见问题解决 1. **服务未注册**: - 检查Nacos地址是否正确 - 查看Dubbo启动日志中的注册日志 - 验证Nacos防火墙设置(8848端口) 2. **序列化错误**: ```java // 接口需要实现Serializable public class User implements Serializable { // 必须包含无参构造器 public User() {} } ``` 3. **版本冲突**: 使用`gradle dependencies`命令检查依赖树 ```groovy // 强制指定版本 configurations.all { resolutionStrategy.force &#39;com.google.guava:guava:31.1-jre&#39; } ``` --- 通过以上步骤即可完成基于Nacos+Dubbo3+SpringBoot微服务搭建。建议使用IDEA的Gradle面板进行模块化管理,实际开发时可根据业务需求添加Hystrix熔断、Sentinel流控等组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值