-
一、项目层级
二、项目依赖 / 项目配置
-
sql
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for payment -- ---------------------------- DROP TABLE IF EXISTS `payment`; CREATE TABLE `payment` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `serial` varchar(255) DEFAULT '' COMMENT '流水号', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of payment -- ---------------------------- BEGIN; INSERT INTO `payment` VALUES (1, 'No.1'); INSERT INTO `payment` VALUES (2, 'No.2'); INSERT INTO `payment` VALUES (3, 'No.3'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;
-
cloud-parent
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>org.example</groupId> <artifactId>cloud-parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>cloud-eureka</module> <module>cloud-provider-payment8001</module> <module>file-server</module> <module>cloud-consumer-order8002</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!--boot父版本依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> </parent> <!--cloud管理依赖--> <dependencyManagement> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- spring boot依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> </project>
-
cloud-eureka
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>cloud-parent</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.sdkj</groupId> <artifactId>cloud-eureka</artifactId> <dependencies> <!-- eureka server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
application.yml
server:
port: 8888
eureka:
instance:
#eureka服务端的实例名称
hostname: localhost
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检查服务
fetch-registry: false
#Eureka Server交互地址
service-url:
defaultZone: http://localhost:8888/eureka
-
cloud-provider-payment8001
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>cloud-parent</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.sdkj</groupId> <artifactId>cloud-provider-payment8001</artifactId> <dependencies> <!-- eureka client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> <!--mybatis插件--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies> <executions> <execution> <id>mybatis.generator</id> <phase>package</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <!--允许移动生产的文件--> <verbose>true</verbose> <!--允许自动覆盖文件 工作中不要配置这个 --> <overwrite>false</overwrite> <configurationFile> src/main/resources/mybatis-generator.xml </configurationFile> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> </project>
application.yml
server:
# 端口
port: 8001
spring:
application:
name: cloud-payment-service
#数据源基本配置
datasource:
url: jdbc:mysql://localhost:3306/test_springcloud
username: root
password: 678678
#druid
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
eureka:
client:
# 表示将自己注册进Eureka Server默认为true
register-with-eureka: true
# 是否从Eureka Server抓去已有的注册信息,默认是true
fetch-registry: true
# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
service-url:
defaultZone: http://localhost:8888/eureka
mybatis:
mapper-locations: classpath:mapping/*.xml
mybatis-generator.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!--驱动包的路径--> <!--<classPathEntry location="C:\Users\lhf\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />--> <!--数据库连接--> <context id="DB2Tables" targetRuntime="MyBatis3"> <!--注释--> <!--<commentGenerator> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator>--> <!--数据库连接地址及账号密码--> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test_springcloud" userId="root" password="678678"> </jdbcConnection> <!--<javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver>--> <!--生成DataObject类存放位置--> <javaModelGenerator targetPackage="com.sdkj.dataobject" targetProject="src/main/java"> <!--是否对model添加构造函数--> <property name="constructorBased" value="false"/> <!--是否允许子包--> <property name="enableSubPackages" value="true"/> <!--建立的model对象是否不可变,也就是生成的model没有setter方法--> <property name="immutable" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--生成映射文件存放位置--> <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--生成Dao类的存放位置--> <!-- 客户端代码,生成易于使用的正对Model对象和XML配置文件的代码 type="ANNOTATEDMAPPER", 生成Java Model和基于注解的Mapper对象 type="MIXEDMAPPER", 生成基于注解的Java Model和相应的Mapper对象 type="XMLMAPPER", 生成SQLMap XML文件和独立的Mapper接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.sdkj.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--生成对应表及类名--> <!--<table tableName="user_info" domainObjectName="UserDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!----> <!--<table tableName="user_password" domainObjectName="UserPasswordDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!-- 商品表 --> <!--<table tableName="item" domainObjectName="ItemDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!-- 商品库存表 --> <!--<table tableName="item_stock" domainObjectName="ItemStockDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!--订单表--> <!--<table tableName="order_info" domainObjectName="OrderDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!--sequence表--> <!--<table tableName="sequence_info" domainObjectName="SequenceDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table>--> <!--payment表--> <table tableName="payment" domainObjectName="PaymentDO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" enableInsert="true" enableDeleteByPrimaryKey="false"></table> </context> </generatorConfiguration>
-
cloud-consumer-order8002
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>cloud-parent</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.sdkj</groupId> <artifactId>cloud-consumer-order8002</artifactId> <dependencies> <!-- eureka client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
application.yml
# 端口
server:
port: 8002
spring:
application:
name: cloud-order
eureka:
client:
# 表示将自己注册进Eureka Server默认为true
register-with-eureka: true
# 是否从Eureka Server抓去已有的注册信息,默认是true
fetch-registry: true
# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
service-url:
defaultZone: http://localhost:8888/eureka
三、cloud-provider-payment8001实现数据库交互
-
项目层级
-
PaymentController
1 package com.sdkj.controller; 2 3 import com.sdkj.dataobject.PaymentDO; 4 import com.sdkj.error.BusinessException; 5 import com.sdkj.error.EnumBusinessError; 6 import com.sdkj.response.CommonReturnType; 7 import com.sdkj.service.PaymentService; 8 import org.apache.commons.lang.StringUtils; 9 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.stereotype.Controller; 11 import org.springframework.web.bind.annotation.CrossOrigin; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.ResponseBody; 14 15 /** 16 * @Author wangshuo 17 * @Date 2022/5/19, 9:08 18 * Please add a comment 19 */ 20 @Controller 21 @RequestMapping(value = "/payment") 22 @CrossOrigin(origins = {"*"}, allowCredentials = "true") 23 public class PaymentController extends BaseController { 24 25 @Autowired 26 PaymentService paymentService; 27 28 @RequestMapping(value = "/findById") 29 @ResponseBody 30 public CommonReturnType findById(Long id) throws BusinessException { 31 32 if (StringUtils.isEmpty(id.toString())) 33 throw new BusinessException(EnumBusinessError.REGISTER_OTP_ERROR);//参数不合法 34 PaymentDO payment = paymentService.getPaymentById(id); 35 return CommonReturnType.create(payment); 36 } 37 }
四、cloud-consumer-order8002实现数据库交互
-
项目层级
-
AppConfig
1 package com.sdkj.config; 2 3 import org.springframework.cloud.client.loadbalancer.LoadBalanced; 4 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.web.client.RestTemplate; 7 8 /** 9 * @Author wangshuo 10 * @Date 2022/5/19, 19:49 11 * Please add a comment 12 */ 13 @Configuration 14 public class AppConfig { 15 16 /** 17 * 注入restTemplate,请用请求rest接口 18 * @return 19 */ 20 @Bean 21 // 标注此注解后,RestTemplate就具有了客户端负载均衡能力 22 // 负载均衡技术依赖于的是Ribbon组件~ 23 // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力 24 @LoadBalanced 25 public RestTemplate restTemplate(){ 26 return new RestTemplate(); 27 } 28 }
-
OrderController
1 package com.sdkj.controller; 2 3 import com.sdkj.response.CommonReturnType; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.CrossOrigin; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.ResponseBody; 9 import org.springframework.web.client.RestTemplate; 10 11 /** 12 * @Author wangshuo 13 * @Date 2022/5/19, 19:52 14 * Please add a comment 15 */ 16 @Controller 17 @RequestMapping(value = "/order") 18 @CrossOrigin(origins = {"*"}, allowCredentials = "true") 19 public class OrderController { 20 21 private static final String url = "http://CLOUD-PAYMENT-SERVICE"; 22 @Autowired 23 RestTemplate restTemplate; 24 25 @RequestMapping("/getPaymentById") 26 @ResponseBody 27 public CommonReturnType getById(Long id) { 28 //不要忘记把参数传过去 29 return restTemplate.getForObject(url + "/payment/findById/?id=" + id, CommonReturnType.class); 30 } 31 }
本文来自博客园,作者:荣慕平,转载请注明原文链接:https://www.cnblogs.com/rongmuping/articles/16290383.html