文章目录
一、总说
1.版本与官网
当然你也可以从springcloud官网点进去一个你要学习的版本来查看需要的springboot版本
2.版本的选择
如果你不想因为版本处理而哭的话就严格遵守以下版本
二、创建总父工程
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
关于Run Dashboard
三、支付模块的构建
1.准备工作
1.建module
2.改pom
<dependencies>
<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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.写application.yml
server:
port: 8001 #几乎每个yml里面都要指定它自己运行的端口号
spring:
application:
name: cloud-payment-service #后期要入驻Euraka注册中心得要有自己的名字
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包 com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false #mySQL 5.7以后的进行了安全加固和加强,所以一大串
username: root
password: root
mybatis:
mapperLocations: classpath:mapper/*.xml #mapper映射文件的位置
type-aliases-package: com.atguigu.springcloud.entities # Entity别名实体类所在的位置
4.主启动类
@SpringBootApplication
public class PaymentMain8001
{
public static void main(String[] args)
{
SpringApplication.run(PaymentMain8001.class,args);
}
}
2.编写业务类代码
1.数据库建表
2.Entities实体类
Payment主实体类:Java程序员使用的
@Data
@AllArgsConstructor //全参
@NoArgsConstructor //空参
public class Payment implements Serializable
{
private Long id;
private String serial;
}
Json封装体CommonResult:专门返回给前端程序员用的
/**
* Json封装体CommonResult(返回前端的通用格式)
* code是封装404这种的,message是封装异常信息的,data是传给前端的数据
* 你除了全参、无参构造还要自己写一个只传code和message的构造方法
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T>
{
private Integer code;
private String message;
private T data;
public CommonResult(Integer code, String message)
{
this(code,message,null);
}
}
3.Dao层
接口类PaymentDao
@Mapper //如果你不想报错的话在springboot中使用的是@Mapper而不是@Repository
public interface PaymentDao
{
public int create(Payment payment);
public Payment getPaymentById(@Param("id") Long id);
}
实现类PaymentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.atguigu.springcloud.dao.PaymentDao">
<!--结果映射。规定java实体类里面的属性和数据库的字段的映射规则 -->
<resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="serial" property="serial" jdbcType="VARCHAR"/>
</resultMap>
<!-- id就是dao层里的方法名。useGeneratedKeys="true"表示数据插入数据库成功后,获取自动生成的主键值。keyProperty="id"表示数据库主键是id -->
<insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
INSERT INTO payment(SERIAL) VALUES(#{serial});
</insert>
<!-- resultMap="BaseResultMap"就是结果映射-->
<select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap" >
SELECT * FROM payment WHERE id=#{id};
</select>
</mapper>
4.Service层
接口类PaymentService
public interface PaymentService
{
public int create(Payment payment);
public Payment getPaymentById(@Param("id") Long id);
}
实现类PaymentServiceImpl
@Service //肌肉记忆,@Service注解少不了
public class PaymentServiceImpl implements PaymentService{
@Resource //和@Autowired一样
private PaymentDao paymentDao;
@Override
public int create(Payment payment)
{
return paymentDao.create(payment);
}
@Override
public Payment getPaymentById(Long id)
{
return paymentDao.getPaymentById(id);
}
}
5.Controller类
@RestController
@Slf4j
public class PaymentController
{
@Resource
private PaymentService paymentService;
@PostMapping(value = "/payment/create") //往数据库中写所以建议使用post方式
public CommonResult create(@RequestBody Payment payment)
{
int result = paymentService.create(payment);
log.info("*****插入操作返回结果:" + result);//时髦的做法是日志输出而不是打印
if(result > 0)
{
return new CommonResult(200,"插入数据库成功",result);
}else{
return new CommonResult(444,"插入数据库失败",null);
}
}
@GetMapping(value = "/payment/get/{id}") //从数据库中读所以建议get方式
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)
{
Payment payment = paymentService.getPaymentById(id);
log.info("*****查询结果:{}",payment);
if (payment != null) {
return new CommonResult(200,"查询成功",payment);
}else{
return new CommonResult(444,"没有对应记录,查询ID: "+id,null);
}
}
}
3.测试
- 用浏览器发送
http://localhost:8001/payment/get/31
- 用postman发送post请求(浏览器只支持get请求)
四、开启热部署
1.pom添加依赖
依赖粘贴进Module的pom.xml
里面
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
2.pom添加插件
下段配置我们粘贴进父类总工程的pom.xml
里
<build>
<finalName>你自己的工程名字</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
3.设置
4.重启idea,热部署生效
5.注意点
五、消费者订单模块
1.准备工作
1.建module
2.改pom
<dependencies>
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.写yml
server:
port: 80 #80端口是在url中可以省略的那种,模拟用户下单用户就可以不管端口号
4.主启动类
@SpringBootApplication
public class MainApp80
{
public static void main(String[] args)
{
SpringApplication.run(MainApp80.class,args);
}
}
2.编写业务类代码
1.Entities实体类
Payment主实体类:Java程序员使用的
@Data
@AllArgsConstructor //全参
@NoArgsConstructor //空参
public class Payment implements Serializable
{
private Long id;
private String serial;
}
Json封装体CommonResult:专门返回给前端程序员用的
/**
* Json封装体CommonResult(返回前端的通用格式)
* code是封装404这种的,message是封装异常信息的,data是传给前端的数据
* 你除了全参、无参构造还要自己写一个只传code和message的构造方法
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T>
{
private Integer code;
private String message;
private T data;
public CommonResult(Integer code, String message)
{
this(code,message,null);
}
}
2.config配置类
/**
* RestTemplate的使用要求就是将它注入到容器中,所以你得编写配置类注入它
*/
@Configuration
public class ApplicationContextConfig
{
@Bean
public RestTemplate restTemplate()
{
return new RestTemplate();
}
}
- RestTemplate提供了多种便捷访问远程Http服务的方法,
是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集 - RestTemplate官网
- 使用restTemplate访问restful接口非常的简单粗暴无脑,它有三个参数 (url, requestMap, ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
3.Controller类
@RestController
public class OrderController
{
//定义url,后期要用到
public static final String PaymentSrv_URL = "http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create") //支付模块中插入数据映射的url是@PostMapping("/payment/create"),现在仅仅是多了一个/consumer前缀
public CommonResult create(Payment payment)
{
//(url, requestMap, ResponseBean.class)这三个参数分别代表 REST请求地址(http://localhost:8001/payment/create)、请求参数(payment)、H返回值类型(CommonResult.class)。
return restTemplate.postForObject(PaymentSrv_URL + "/payment/create",payment,CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")//支付模块中查询数据映射的url是@PostMapping("/payment/get/{id}"),现在仅仅是多了一个/consumer前缀
public CommonResult getPayment(@PathVariable("id") Long id)
{
return restTemplate.getForObject(PaymentSrv_URL + "/payment/get/"+id, CommonResult.class);
}
}