目录
1.3、配置启动类【EnableDiscoverClient、mapper接口扫描器】
2.3、配置启动类【EnableDiscoverClient、mapper接口扫描器】
demo项目下载:https://pan.baidu.com/s/1BzTWEhj1q_wOMG7-dhdbhA
创建父工程
1、创建maven工程
1.1、引入依赖【父工程打包方式为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>
<groupId>com.wan.demo</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<modules>
<module>user-service</module>
<module>consumer-service</module>
<module>eureka-server</module>
</modules>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
<mapper.starter.version>2.1.5</mapper.starter.version>
<mysql.version>8.0.17</mysql.version>
<pageHelper.starter.version>1.2.5</pageHelper.starter.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springcloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--通用mapper启动器【包含了连接池、mybatis的启动器】-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.starter.version}</version>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--test启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--服务器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!--分页助手启动器-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建子工程
1、创建user-service
子工程结构:
1.1、引入依赖
<?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-demo</artifactId>
<groupId>com.wan.demo</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user-service</artifactId>
<dependencies>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--通用mapper启动器【包含了连接池、mybatis的启动器】-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
1.2、配置yaml文件
server:
port: 8088
#数据源配置,默认HiKariCP
spring:
main:
allow-bean-definition-overriding: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springbootdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
application:
name: user-service
#mybatis
mybatis:
configuration:
map-underscore-to-camel-case: true #开启自动驼峰匹配
type-aliases-package: com.wan.user.pojo #别名,对应的实体类名字
mapper-locations: classpath:mapper/*.xml #扫描.xml文件,映射文件路径
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka
registry-fetch-interval-seconds: 30 #拉取服务列表周期
instance:
lease-renewal-interval-in-seconds: 30 #客户端发送心跳的频率
lease-expiration-duration-in-seconds: 90 #最小过期时长
prefer-ip-address: true
ip-address: 127.0.0.1 #当前服务的ip为127.0.0.1
1.3、配置启动类【EnableDiscoverClient、mapper接口扫描器】
@EnableDiscoveryClient // 内部既能兼容eurake又能兼容zookeeper【注册中心客户端】
@SpringBootApplication
@MapperScan(basePackages = "com.wan.user.mapper")
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
1.4、配置pojo类
@Data
@Table(name = "tb_user") // 对应的表名
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id // 主键
@KeySql(useGeneratedKeys = true) // 主键自增
private BigDecimal id;
private String username;
private String password;
@Transient // (瞬时的)不用持久化的属性,不会作为sql语句的字段
private String note;
}
1.5、配置通用Mapper
public interface UserMapper extends Mapper<User> {
}
1.5、配置service
*/
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public User queryById(BigDecimal id) {
return userMapper.selectByPrimaryKey(id);
}
}
1.6、配置controller
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User queryById(@PathVariable("id")BigDecimal id) {
return userService.queryById(id);
}
}
2、创建consumer-service服务调用方
2.1、引入依赖
<?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-demo</artifactId>
<groupId>com.wan.demo</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
2.2、配置yaml文件
server:
port: 8086
spring:
application:
name: consumer-service
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
user-service:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
2.3、配置启动类【EnableDiscoverClient、mapper接口扫描器】
@EnableCircuitBreaker // 服务熔断
@EnableDiscoveryClient // 内部既能兼容eurake又能兼容zookeeper
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
//@SpringCloudApplication
public class ConsumerApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class);
}
}
2.4、配置pojo类
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private BigDecimal id;
private String username;
private String password;
private String note;
}
2.5、配置controller
@RestController
@RequestMapping("consumer")
@DefaultProperties(defaultFallback = "queryByIdFallback")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
// @Autowired
// private DiscoveryClient discoveryClient;
//
// @Autowired
// private RibbonLoadBalancerClient client;
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
//@HystrixCommand(fallbackMethod = "queryByIdFallback")
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
})
public String queryById(@PathVariable("id")BigDecimal id){
String url = "http://user-service/user/" + id;
String user = restTemplate.getForObject(url, String.class);
return user;
}
public String queryByIdFallback(BigDecimal id){
return "服务器忙";
}
// @RequestMapping(value = "/{id}", method = RequestMethod.GET)
// public String queryById(@PathVariable("id")BigDecimal id){
// /*// 根据服务id获取实例
// List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
// // 从实例中取出ip和端口【该处实现负载均衡】
// ServiceInstance instance = instances.get(0);
// String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/user/" + id;*/
//
// //ServiceInstance instance = client.choose("");
//
// String url = "http://user-service/user/" + id;
// String user = restTemplate.getForObject(url, String.class);
// return user;
// }
}