org.projectlombok
lombok
${lombok.version}
provided
com.alibaba
dubbo
${dubbo.version}
log4j
log4j
com.101tec
zkclient
${zkclient.version}
org.apache.maven.plugins
maven-compiler-plugin
${java.version}${java.version}
UTF-8
org.apache.maven.plugins
maven-resources-plugin
UTF-8
parent父工程到这里就可以不动他了,如果你的子模块有变动再更新
对parent项目创建cmmon子模块,common模块一般用于存放公共的实体类、工具类等公用信息。
此处用于仅用于测试所以只创建一个user对象以及userservice
最终结构如下图(此处有个不影响使用的问题,应该时domain,结果拼成了domin了,当然也可自行更改为entity之类的 看个人习惯)
User.java(需要实现Serializable 接口)
package com.demo.common.domin;
import java.io.Serializable;
/**
-
@ClassName: User
-
@Package: com.demo.common.domin
-
@Description:
-
@Datetime: 2020/7/10 17:04
-
@author: kaishun.zhou
*/
public class User implements Serializable {
private String id;
private String username;
private String password;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
UserService.java
package com.demo.common.service;
import com.demo.common.domin.User;
import java.util.List;
/**
-
@ClassName: UserService
-
@Package: com.demo.common.service
-
@Description:
-
@Datetime: 2020/7/10 17:05
-
@author: kaishun.zhou
*/
public interface UserService {
List findAll();
}
common模块到此结束。pom以及application默认即可,此案例中可以不使用。
创建provider模块去具体实现common下的服务。实际开发中会有多个provider模块以及多种服务以及实现。
首先修改pom文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE
com.demo
provider
0.0.1-SNAPSHOT
provider
jar
Demo project for Spring Boot
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<zkclient.version>0.10</zkclient.version>
com.demo
common
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
dubbo
2.5.5
log4j
log4j
com.101tec
zkclient
${zkclient.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
5.1.35
com.alibaba
druid
1.0.11
org.springframework.boot
spring-boot-starter-tomcat
provided
org.springframework.boot
spring-boot-maven-plugin
创建service的实现impl、创建mapper、修改application.yml、创建spring-dubbo.xml
结构如图(application.properties为默认带的,可删除,也可直接修改后缀为yml)
UserMapper.java
package com.demo.provider.mapper;
import com.demo.common.domin.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
-
@ClassName: UserMapper
-
@Package: com.demo.provider.mapper
-
@Description:
-
@Datetime: 2020/7/10 17:10
-
@author: kaishun.zhou
*/
@Mapper
public interface UserMapper {
@Results(id = “userMap”, value = {
@Result(column = “id”, property = “id”),
@Result(column = “username”, property = “username”),
@Result(column = “age”, property = “age”),
@Result(column = “password”, property = “password”)})
@Select(“SELECT * FROM user”)
List getAll();
}
添加mapper后对应的启动类需要添加扫描后面会贴代码
UserServiceImpl.java
package com.demo.provider.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.demo.common.domin.User;
import com.demo.common.service.UserService;
import com.demo.provider.mapper.UserMapper;
import javax.annotation.Resource;
import java.util.List;
/**
-
@ClassName: UserImpl
-
@Package: com.demo.provider.service.impl
-
@Description:
-
@Datetime: 2020/7/10 17:09
-
@author: kaishun.zhou
*/
@Service(version = “1.0.0”)
public class UserImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List findAll() {
System.out.println(“进入提供者实现体”);
List list = userMapper.getAll();
System.out.println(“用户数量:”+list.size());
return list;
}
}
注意:
此处的@Service为com.alibaba.dubbo.config.annotation.Service;
而不是org.springframework.stereotype.Service
此处的demo测试中版本号可加可不加
application.yml
server:
port: 8082
spring:
datasource:
name: dubbo_demo
url: jdbc:mysql://127.0.0.1:3306/dubbo_demo
username: root
password: 123456
使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: domain
此处provider模块为8082端口,后面customer模块为8081端口
创建spring-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:dubbo=“http://code.alibabatech.com/schema/dubbo”
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name=“provider”/>
<dubbo:registry address=“zookeeper://127.0.0.1:2181”/>
<dubbo:annotation package=“service.impl”/>
<dubbo:protocol name=“dubbo” port=“20880”/>
<dubbo:service interface=“com.demo.common.service.UserService” ref=“userService”/>
此文件中配置参数路径根据自己配置路径修改。
修改启动类ProviderApplication.java
package com.demo.provider;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource({“classpath:spring-dubbo.xml”})
@MapperScan(“mapper”)
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
System.out.println(“服务端启动成功!!!”);
}
}
provider模块至此结束
创建customer模块去调用provider模块下服务。
修改pom文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE
com.demo
customer
0.0.1-SNAPSHOT
customer
jar
Demo project for Spring Boot
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<zkclient.version>0.10</zkclient.version>
com.demo
common
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
dubbo
2.5.5
log4j
log4j
com.101tec
zkclient
${zkclient.version}
org.springframework.boot
spring-boot-maven-plugin
创建UserController,创建application.yml或者直接修改application.properties文件,此处用于测试选择的直接修改application.properties,至于为何不新建ym原因在下面、创建spring-dubbo.xml
最终结构如下图:
UserController.java
package com.demo.customer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.demo.common.domin.User;
import com.demo.common.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;