一、Spring Cloud项目搭建 ╰半夏微凉° 2022-04-01 16:26 219阅读 0赞 #### 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` ![在这里插入图片描述][111801.png] ![在这里插入图片描述][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/][https_www.projectlombok.org] <table> <thead> <tr> <th>注解</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>@Data</td> <td>在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor注解,即当使用当前注解时,会自动生成包含的所有方法;</td> </tr> <tr> <td>@getter</td> <td>在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;</td> </tr> <tr> <td>@setter</td> <td>在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法;</td> </tr> <tr> <td>@NoArgsConstructor</td> <td>在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法;</td> </tr> <tr> <td>@AllArgsConstructor</td> <td>在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;</td> </tr> <tr> <td>@ToString</td> <td>在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;</td> </tr> <tr> <td>@EqualsAndHashCode</td> <td>在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;</td> </tr> <tr> <td>@Slf4j</td> <td>在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;</td> </tr> <tr> <td>@Log4j</td> <td>在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;</td> </tr> <tr> <td>@Accessors(prefix = {“first”}, fluent = true, chain = false)</td> <td>与生存的get和set方法有关,prefix与定义属性前缀相同时且接下来的字符大写才生效,可以看源码注释或自行尝试;<br>fluent是决定生成的get/set方法要不要set/get前缀,chain决定set方法是void类型还是返回this</td> </tr> </tbody> </table> 项目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;返回内容如下,说明服务提供者搭建成功。 ![在这里插入图片描述][111601.png] #### 4、创建服务消费者 #### 新建`Module`,名称为`springcloud-consumer-user-8000`。 创建过来不在详细讲述;创建完成后,项目结构目录如下: ![在这里插入图片描述][111805.png] * 在`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][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][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][http_localhost_8000_consumer_user_1_http_localhost_8000_consumer_user_all] ![在这里插入图片描述][111806.png] ![在这里插入图片描述][111807.png] 出现以上结果,服务消费者配置成功。该程序只做简单实例。 [QQ20181114-231422.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/QQ20181114-231422.png [QQ20181114-231655.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/QQ20181114-231655.png [QQ20181114-231747.png]: /images/20220401/dae109e069864628a75175f6df19ee74.png [QQ20181114-231821.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/QQ20181114-231821.png [111801.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111801.png [111802.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111802.png [111803.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111803.png [https_www.projectlombok.org]: https://www.projectlombok.org/ [111804.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111804.png [111601.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111601.png [111805.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111805.png [https_blog.csdn.net_July_whj_article_details_83449911]: https://blog.csdn.net/July_whj/article/details/83449911 [https_docs.spring.io_spring_docs_current_javadoc-api_org_springframework_web_client_RestTemplate.html]: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html [http_localhost_8000_consumer_user_1_http_localhost_8000_consumer_user_all]: http://localhost:8000/consumer/user/1%EF%BC%9Bhttp://localhost:8000/consumer/user/all [111806.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111806.png [111807.png]: https://github.com/hongjieWang/SpringCloud/raw/master/SpringCloudNote/images/111807.png
还没有评论,来说两句吧...