1、建立父工程
首先创建一个父工程,名字为spring cloud打开IDEA(以下编码过程编码工具采用IDEA)。
创建新工程为Spring Cloud。
QQ20181114-231422.png 选择下一步
QQ20181114-231655.png QQ20181114-231747.png QQ20181114-231821.png
引入pom.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>cn.org.july.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.version>1.0-SNAPSHOT</project.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<lombok.version>1.16.18</lombok.version>
<log4j.version>1.2.17</log4j.version>
<junit.version>4.12</junit.version>
<mysql.version>6.0.6</mysql.version>
<druid.version>1.1.10</druid.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mysql jdbc 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>default-site</id>
<phase>site</phase>
<goals>
<goal>site</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
该工程为父工程,打包方式为pom.<packaging>pom</packaging>
2、建立服务API模块
在父工程中,新建Module
,module名称为springcloud-api
111802.png 创建完成后项目结构如下:
111803.png 新建包cn.org.july.springcloud.api.entities
新建类User
内容如下:
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class User implements Serializable {
/**
* 主键
*/
private Integer id;
/**
* 部门名称
*/
private String userName;
/**
* 存储数据库位置(分布式部署可能存在多个数据库)
*/
private String dbSource;
/**
* 电话号
*/
private Spring phone;
/**
* 邮箱
*/
private String email;
/**
* 密码
*/
private String pwd;
}
说明:此次使用lombok插件;官网 https://www.projectlombok.org/
注解 | 说明 |
---|---|
@Data | 在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor注解,即当使用当前注解时,会自动生成包含的所有方法; |
@getter | 在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法; |
@setter | 在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法; |
@NoArgsConstructor | 在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法; |
@AllArgsConstructor | 在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法; |
@ToString | 在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法; |
@EqualsAndHashCode | 在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法; |
@Slf4j | 在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可; |
@Log4j | 在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可; |
@Accessors(prefix = {"first"}, fluent = true, chain = false) | 与生存的get和set方法有关,prefix与定义属性前缀相同时且接下来的字符大写才生效,可以看源码注释或自行尝试; fluent是决定生成的get/set方法要不要set/get前缀,chain决定set方法是void类型还是返回this |
项目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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.org.july.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>springcloud-api</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
</dependencies>
</project>
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class User implements Serializable {
/**
* 主键
*/
private Integer id;
/**
* 部门名称
*/
private String userName;
/**
* 存储数据库位置(分布式部署可能存在多个数据库)
*/
private String dbSource;
/**
* 电话号
*/
private Spring phone;
/**
* 邮箱
*/
private String email;
/**
* 密码
*/
private String pwd;
}
3、建立服务提供者
在父工程中,新建Module
,module名称为springcloud-provider-user-8001
。
创建过程如上,不再截图。
修改该Module
pom.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">
<parent>
<artifactId>springcloud</artifactId>
<groupId>cn.org.july.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-provider-user-8001</artifactId>
<dependencies>
<!-- 引入API -->
<dependency>
<groupId>cn.org.july.springcloud</groupId>
<artifactId>springcloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- 数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!-- springBoot 集成 mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
我们这里主要是讲整体架构搭建,我们不具体实现复杂的业务逻辑。以下只实现查询接口。
在新建的Module中建立如下项目结构:
111804.png-
新建包路径
cn.org.july.springcloud.dao;cn.org.july.springcloud.service;cn.org.july.springcloud.controller;
。 -
在
resources
目录下创建application.yml
配置文件。xserver: port: 8001 mybatis: type-aliases-package: cn.org.july.springcloudapi.entities #所以entity别名类所在路径 spring: application: name: springcloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型 driver-class-name: com.mysql.cj.jdbc.Driver #mysql驱动包 url: jdbc:mysql://127.0.0.1:3306/cloudDB01 #数据库连接 username: root password: xxxx dbcp2: min-idle: 5 #数据库连接池的最小维持连接数 initial-size: 5 #初始化连接数 max-total: 5 #最大连接数 max-wait-millis: 200 #等待连接获取的最大超时时间
注意:
spring: application: name: springcloud-user
-
新建数据库cloudDB01执行以下脚本
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 50719 Source Host : localhost Source Database : cloudDB01 Target Server Type : MySQL Target Server Version : 50719 File Encoding : utf-8 Date: 11/18/2018 14:19:42 PM */ SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `dbSource` varchar(50) DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, `pwd` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of `user_copy` -- ---------------------------- BEGIN; INSERT INTO `user` VALUES ('1', 'JULY', 'cloudDB01', '18232533234', 'july@163.com', '123456'), ('2', 'WHJ', 'cloudDB01', '12312312312', '123@qq.com', '123456'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;
-
在dao中新建类:
UserDao
.内容如下:@Mapper public interface UserDao { @Select("select * from user") List<User> findAll(); @Select("select * from user where id = #{id}") User findById(Long id); }
-
在service中新建类:
UserService
。内容如下:@Service public class UserService { @Autowired private UserDao userDao; public User findById(Long id) { return userDao.findById(id); } public List<User> findAll() { return userDao.findAll(); } }
-
在controller中新建类:
UserController
。内容如下:@RestController @RequestMapping public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/user/all") @ResponseBody public List<User> getAllUser(){ return userService.findAll(); } @RequestMapping(value = "/user/{id}") @ResponseBody public User getUserById(@PathVariable("id") Long id){ return userService.findById(id); } }
-
创建服务启动类
Application_provider_8001
。内容如下:@SpringBootApplication @MapperScan(basePackages = "cn.org.july.springcloud") public class Application_provider_8001 { public static void main(String[] args) { SpringApplication.run(Application_provider_8001.class, args); } }
-
启动后在浏览器中输入http://localhost:8001/user/all;返回内容如下,说明服务提供者搭建成功。
4、创建服务消费者
新建Module
,名称为springcloud-consumer-user-8000
。
创建过来不在详细讲述;创建完成后,项目结构目录如下:
[图片上传失败...(image-f5e239-1546251342956)]
-
在
springcloud-consumer-user-8000
中,新建包结构,cn.org.july.springcloud.cfgbean;cn.org.july.springcloud.controller
. -
在
resources
目录新建application.yml
配置文件server: port: 8000
作为服务消费者,只需要指定服务端口即可。
-
在
cn.org.july.springcloud.cfgbean
包创建ConfigBean
.内容如下:@Configuration public class ConfigBean { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
关于这两个注解,笔者在Spring Boot 中已经详细讲解过,有想了解,提供传送门;https://blog.csdn.net/July_whj/article/details/83449911
RestTemplate: RestTemplate 提供了多种便捷访问远程HTTP服务的方法,是一种简单便捷的访问restful服务模版类,是Spring提供的用于访问Rest服务的客户端模版工具集。详情查看官方网站 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html
-
在
controller
中新建UserController_Consumer
类。(这里命名有点怪。。。)@RestController public class UserController_Consumer { /** * 服务提供方地址 */ private static final String url = "http://localhost:8001/"; /** * RestTemplate 提供了多种便捷访问远程HTTP服务的方法 * 是一种简单便捷的访问restful服务模版类,是Spring提供的用于访问 * Rest服务的客户端模版工具集 */ @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/consumer/user/all") @ResponseBody public List getUserAll() { return restTemplate.getForObject(url.concat("user/all"), List.class); } @RequestMapping(value = "/consumer/user/{id}") @ResponseBody public ResponseEntity<User> getUserById(@PathVariable("id") Long id) { return restTemplate.getForEntity(url.concat("user/").concat(id.toString()), User.class); } }
这里和服务提供者的区别访问地址新增
consumer
路径。 -
创建服务启动类
Application_consumer_8000
,内容如下:@SpringBootApplication public class Application_consumer_8000 { public static void main(String[] args) { SpringApplication.run(Application_consumer_8000.class, args); } }
-
首先启动服务提供者服务
springcloud-provider-user-8001
,在启动服务消费者springcloud-consumer-user-8000
.服务启动成功后访问 http://localhost:8000/consumer/user/1;http://localhost:8000/consumer/user/all
出现以上结果,服务消费者配置成功。该程序只做简单实例。
网友评论