Maven多模块项目讲解,以及在idea上如何使用SpringBoot框架搭建
一:Maven多模块项目
1.Maven多模块项目
2.解决项目中出现多个相同的jar包 和 service接口 以及 实体类对象
3.将以上相同的提取成一个项目来维护管理,然后其他需要用到则只要引用jar包即可
4.将springboot+dubbo框架项目进行拆分
5. 生产者 消费者 接口项目 实体类和jar
5.1 生产者项目创建方式springboot项目方式创建
5.2 消费者项目创建方式springboot项目方式创建
5.3 接口项目为maven jar项目进行创建 ,然后生产者和消费者引用jar项目即可
5.4 将实体类和公用jar为一个项目进行创建 ,然后生产者和消费者引用jar
6. Maven多模块需要创建一个父级项目来管理子模块
6.1 父模块项目什么都没有,只有一个pom文件
二:搭建过程
1.首先搭建父级项目:
1.1 FIle --》New--》projects--》Maven 勾选Create From archeType --》选择 quick start
1.2 填写 group Id 和 那个 id 点next
1.3 注意:Maven地址必须为自己的,选择maven setting文件
1.4 创建完可以将src目录删除,保留pom文件
这个只是作为管理子模块使用只保留pom
创建父级项目为 File--》New--》Projects
需要添加子模块关联关系
<modules>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
<module>dubbo-service-api</module>
<module>dubbo-common</module>
</modules>
2.创建子模块,选中父级项目右击--》new--》Module 创建生产者和消费者,生产者如果要连接数据库记得选对应的服务。
创建子模块项目名称
右击父级项目选择New--》Module
2.1公共项目:dubbo-common
2.2service接口: dubbo-service-api
2.3生产者: dubbo-provider
2.4消费者: dubbo-consumer
生产者:
消费者:
3.创建common和service api项目选择Maven quick start,maven项目。
包结构创建完毕
公共项目:dubbo-common
service接口: dubbo-service-api
生产者: dubbo-provider
消费者: dubbo-consumer
common和service-api创建方式为Maven quick Start
provider和consumer创建方式为spring initializr
4.创建service-api和common的依赖关系,在service-api的pom.xml文件中引入核心jar包
<!-- 创建依赖关系,映入子模块儿 -->
<dependency>
<groupId>com.jk</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
5.同理在dubbo-consumer和dubbo-provider的pom.xml文件中引入service-api依赖关系
<!--引入service-api -->
<dependency>
<groupId>com.jk</groupId>
<artifactId>service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
6.在父级项目的pom.xml文件中添加子模块儿关联关系
<modules>
<module>service-api</module>
<module>common</module>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
</modules>
7.写一个方法测试一下
common中创建一个实体Bean,记得要序列化
package com.jk.model;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -8843334204639736649L;
private Integer userId;
private String userName;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
'}';
}
}
并且在它的pom.xml文件中引入核心Jar包
<!--dubbo 依赖 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper client依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
8.在dubbo-provider生产者的配置类中配置
#配置dubbo服务提供者
#服务名称
spring.dubbo.application.name=provider
spring.dubbo.server=true
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo 协议
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
9.在dubbo-consumr消费者的配置类中配置
#为防止和生产者端口号冲突
server.port=8081
#配置dubbo消费者
spring.dubbo.application.name=consumer
#配置注册中心
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo协议
spring.dubbo.procotol.name=dubbo
spring.dubbo.procotol.port=20880
#消费者启动检测生产者是否已启动,当值为true时才会检测,默认为true
spring.dubbo.consumer.check=false
#roundrobin轮询机制
#random #随机机制
#leastactive #最少活跃调用数机制
spring.dubbo.reference.loadbalance=roundrobin
10.在service-api中创建一个接口
package com.jk.service;
import com.jk.model.User;
public interface UserService {
User saveUser(User user);
}
11.在dubbo-provider生产者中创建UserServiceImpl实现类
package com.jk.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.jk.model.User;
import org.springframework.stereotype.Component;
@Service(interfaceClass = UserService.class)
@Component
public class UserServiceImpl implements UserService{
@Override
public User saveUser(User user) {
user.setUserId(18);
return user;
}
}
12.在dubbo-comsumer消费者中创建controller层接收前台传过来的值
package com.jk.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.jk.model.User;
import com.jk.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
//ResponseBody+Controller注解的结合
public class UserController {
@Reference
private UserService userService;
//@PostMapping()
@GetMapping("/saveUser/{userName}/{age}") // result风格(指定请求方式)
public User saveUser(@PathVariable String userName , @PathVariable Integer age){
System.out.println("------------------------"+age+"--------------------");
User user = new User();
user.setUserName(userName);
user = userService.saveUser(user);
return user;
}
}
13.在生产者和消费者项目的启动类加上注解@EnableDubboConfiguration @ComponentScan("com.jk.*")
package com.jk.app;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableDubboConfiguration
@ComponentScan("com.jk.*")
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
14.如果不连数据库请删掉位于dubbo-provider生产者中的mysql和mybatis的jar包否则启动报错
15.启动项目访问接口
16.访问成功,项目搭建完毕。