Springboot集成Dubbo(以注解形式)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Springboot集成Dubbo(以注解形式)

Springboot 集成 Dubbo(以注解形式)

网址


Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

Zookeeper 安装

单机安装,见官网


案例一

使用专用接口定义


项目总体结构如下

springboot-dubbo
----dubbo-api
  ----pom
  ----src
  ----main
            ----java
                ----top.simba1949.service.DubboService.java
----dubbo-provider
  ----pom
  ----src
  ----main
    ----java
    ----top.simba1949
      ----Application.java
      ----service.impl.DubboServiceImpl.java
  ----resources
    ----application.yml
----dubbo-consumer
  ----pom
  ----src
  ----main
    ----java
    ----top.simba1949
      ----Application.java
      ----controller.DubboController
  ----resources
    ----application.yml


父项目


用于管理项目依赖和版本控制

Springboot 集成 Dubbo 的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>${dubbo.version}</version>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>${dubbo-spring-boot-starter.version}</version>
</dependency>
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
</dependency>


pom.xml

<properties>
    <lombok.version>1.18.4</lombok.version>
    <dubbo.version>2.6.4 </dubbo.version>
    <dubbo-spring-boot-starter.version>0.2.0</dubbo-spring-boot-starter.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>Cairo-SR6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <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>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional> <!-- 表示依赖不会传递 -->
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>${dubbo-spring-boot-starter.version}</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <!--编译插件-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <!-- 配置使用的 jdk 版本 -->
                <target>1.8</target>
                <source>1.8</source>
            </configuration>
        </plugin>
        <!--springboot-maven打包插件-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--资源拷贝插件-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!--实现热部署插件-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
            </configuration>
        </plugin>
    </plugins>
    <!--IDEA是不会编译src的java目录的xml文件,如果需要读取,则需要手动指定哪些配置文件需要读取-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
    </resources>
</build>


接口定义 module

DubboService.java

package top.simba1949.service;
/**
 * @author SIMBA1949
 * @date 2019/1/21 22:34
 */
public interface DubboService {
    /**
     * HELLO
     * @param hello
     * @return
     */
    String str(String hello);
}


服务提供者 module

服务提供者依赖接口定义 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>dubbo-01</artifactId>
        <groupId>top.simba1949</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>dubbo-01-producer</artifactId>
    <dependencies>
        <dependency>
            <groupId>top.simba1949</groupId>
            <artifactId>dubbo-01-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>


application.yml 配置文件

server:
  port: 8091
# dubbo 配置
dubbo:
  application:
    id: dubbo-producer
    name: dubbo-producer
  # dubbo 注册中心地址
  registry:
    address: zookeeper://192.168.239.147:2181
  # 服务提供者的协议名和端口
  protocol:
    server: true
    name: dubbo
    port: 20800


实现类 DubboServiceImpl.java 实现具体的业务逻辑

package top.simba1949.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import top.simba1949.service.DubboService;
/**
 * com.alibaba.dubbo.config.annotation.Service 是 Alibaba 包下的注解,表明这是 dubbo 服务提供者
 * @author SIMBA1949
 * @date 2019/1/21 22:34
 */
@Slf4j
@Component
@Service
public class DubboServiceImpl implements DubboService {
    @Override
    public String str(String hello) {
        log.info("服务提供者:" + hello);
        return "服务提供者道:" + hello;
    }
}


启动类 Application.java

package top.simba1949;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @EnableDubbo 用于开启 dubbo 注解的扫描和自动配置
 * @author SIMBA1949
 * @date 2019/1/21 22:32
 */
@EnableDubbo
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

服务消费者 module

服务消费者依赖接口定义 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>dubbo-01</artifactId>
        <groupId>top.simba1949</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>dubbo-01-consumer</artifactId>
    <dependencies>
        <dependency>
            <groupId>top.simba1949</groupId>
            <artifactId>dubbo-01-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>


application.yml

server:
  port: 8081
dubbo:
  application:
    id: dubbo-consumer
    name: dubbo-consumer
  registry:
    address: zookeeper://192.168.239.147:2181
  protocol:
    name: dubbo
    port: 20800
  consumer:
    check: false


调用服务的具体的类 DubboController.java

package top.simba1949.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.simba1949.service.DubboService;
/**
 * @Reference 会自动注入 dubbo 服务
 * @author SIMBA1949
 * @date 2019/1/21 22:45
 */
@RestController
@RequestMapping
@Slf4j
public class DubboController {
    @Reference
    private DubboService dubboService;
    @GetMapping("hello")
    public String str(String hello){
        log.info("消费者消费前:" + hello);
        String str = dubboService.str(hello);
        log.info("消费者消费后:" + str);
        return str;
    }
}


启动类

package top.simba1949;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author SIMBA1949
 * @date 2019/1/21 22:43
 */
@SpringBootApplication
@EnableDubbo
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


案例二

服务提供者和服务消费者,使用相同的接口和实体类,但是属于不同的文件


服务提供者

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>top.simba1949</groupId>
    <artifactId>dubbo-02-provider</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <lombok.version>1.18.4</lombok.version>
        <dubbo.version>2.6.4 </dubbo.version>
        <dubbo-spring-boot-starter.version>0.2.0</dubbo-spring-boot-starter.version>
        <fastjson.version>1.2.55</fastjson.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Cairo-SR6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!--编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- 配置使用的 jdk 版本 -->
                    <target>1.8</target>
                    <source>1.8</source>
                </configuration>
            </plugin>
            <!--springboot-maven打包插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--资源拷贝插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--实现热部署插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
            </plugin>
        </plugins>
        <!--IDEA是不会编译src的java目录的xml文件,如果需要读取,则需要手动指定哪些配置文件需要读取-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>


application.yml

server:
  port: 8071
# DUBBO CONFIGURE
dubbo:
  application:
    id: springboot-dubbo-provider
    name: springboot-dubbo-provider
  registry:
    address: zookeeper://192.168.239.147:2181
  protocol:
    server: true
    name: dubbo
    port: 20801


实体类

package top.simba1949.common;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:45
 */
@Data
public class UserDto implements Serializable {
    private static final long serialVersionUID = 2223107801863147437L;
    private Long id;
    private String username;
    private Date birthday;
    private Boolean flag;
}


接口类

package top.simba1949.service;
import top.simba1949.common.UserDto;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:45
 */
public interface UserService {
    /**
     * USER
     * @param userStr
     * @return
     */
    UserDto user(String userStr);
}


接口实现类

package top.simba1949.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import top.simba1949.common.UserDto;
import top.simba1949.service.UserService;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:45
 */
@Component
@Slf4j
@Service
public class UserServiceImpl implements UserService {
    @Override
    public UserDto user(String userStr) {
        log.info("服务提供者获取的数据为:" +  userStr);
        UserDto userDto = JSON.parseObject(userStr, UserDto.class);
        userDto.setUsername("服务提供者:" + userDto.getUsername());
        return userDto;
    }
}


启动类

server:
  port: 8071
# DUBBO CONFIGURE
dubbo:
  application:
    id: springboot-dubbo-provider
    name: springboot-dubbo-provider
  registry:
    address: zookeeper://192.168.239.147:2181
  protocol:
    server: true
    name: dubbo
    port: 20801


服务消费者

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>top.simba1949</groupId>
    <artifactId>dubbo-02-consumer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <lombok.version>1.18.4</lombok.version>
        <dubbo.version>2.6.4 </dubbo.version>
        <dubbo-spring-boot-starter.version>0.2.0</dubbo-spring-boot-starter.version>
        <fastjson.version>1.2.55</fastjson.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Cairo-SR6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!--编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- 配置使用的 jdk 版本 -->
                    <target>1.8</target>
                    <source>1.8</source>
                </configuration>
            </plugin>
            <!--springboot-maven打包插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--资源拷贝插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--实现热部署插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
            </plugin>
        </plugins>
        <!--IDEA是不会编译src的java目录的xml文件,如果需要读取,则需要手动指定哪些配置文件需要读取-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>


配置文件

server:
  port: 8079
# DUBBO CONFIGURE
dubbo:
  application:
    id: springboot-dubbo-consumer
    name: springboot-dubbo-consumer
  registry:
    address: zookeeper://192.168.239.147:2181
  protocol:
    name: dubbo
    port: 20801
  consumer:
    check: false


实体类

package top.simba1949.common;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:45
 */
@Data
public class UserDto implements Serializable {
    private static final long serialVersionUID = 2223107801863147437L;
    private Long id;
    private String username;
    private Date birthday;
    private Boolean flag;
}


接口类

package top.simba1949.service;
import top.simba1949.common.UserDto;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:45
 */
public interface UserService {
    /**
     * USER
     * @param userStr
     * @return
     */
    UserDto user(String userStr);
}


调用dubbo服务java类

package top.simba1949.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.simba1949.common.UserDto;
import top.simba1949.service.UserService;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:58
 */
@RestController
@RequestMapping
@Slf4j
public class UserController {
    @Reference
    private UserService userService;
    @PostMapping("user")
    public UserDto user(@RequestBody UserDto userDto){
        log.info("消费者消费之前的数据:" +  userDto);
        String userStr = JSON.toJSONString(userDto);
        UserDto user = userService.user(userStr);
        log.info("消费者消费之后的数据:" + user);
        return user;
    }
}


启动类

package top.simba1949;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author SIMBA1949
 * @date 2019/1/21 23:43
 */
@EnableDubbo
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


Dubbo Admin 管理的安装

Dubbo Admin 安装


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
5天前
|
前端开发 Java 应用服务中间件
从零手写实现 tomcat-08-tomcat 如何与 springboot 集成?
该文是一系列关于从零开始手写实现 Apache Tomcat 的教程概述。作者希望通过亲自动手实践理解 Tomcat 的核心机制。文章讨论了 Spring Boot 如何实现直接通过 `main` 方法启动,Spring 与 Tomcat 容器的集成方式,以及两者生命周期的同步原理。文中还提出了实现 Tomcat 的启发,强调在设计启动流程时确保资源的正确加载和初始化。最后提到了一个名为 mini-cat(嗅虎)的简易 Tomcat 实现项目,开源于 [GitHub](https://github.com/houbb/minicat)。
|
7天前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
24天前
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka
|
1月前
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
355 0
|
2月前
|
NoSQL Java Redis
SpringBoot集成Redis
SpringBoot集成Redis
464 0
|
1月前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
28 2
|
5天前
|
前端开发 Java 应用服务中间件
从零手写实现 tomcat-08-tomcat 如何与 springboot 集成?
本文探讨了Spring Boot如何实现像普通Java程序一样通过main方法启动,关键在于Spring Boot的自动配置、内嵌Servlet容器(如Tomcat)以及`SpringApplication`类。Spring与Tomcat集成有两种方式:独立模式和嵌入式模式,两者通过Servlet规范、Spring MVC协同工作。Spring和Tomcat的生命周期同步涉及启动、运行和关闭阶段,通过事件和监听器实现。文章鼓励读者从实现Tomcat中学习资源管理和生命周期管理。此外,推荐了Netty权威指南系列文章,并提到了一个名为mini-cat的简易Tomcat实现项目。
|
2天前
|
缓存 NoSQL Java
springboot业务开发--springboot集成redis解决缓存雪崩穿透问题
该文介绍了缓存使用中可能出现的三个问题及解决方案:缓存穿透、缓存击穿和缓存雪崩。为防止缓存穿透,可校验请求数据并缓存空值;缓存击穿可采用限流、热点数据预加载或加锁策略;缓存雪崩则需避免同一时间大量缓存失效,可设置随机过期时间。文章还提及了Spring Boot中Redis缓存的配置,包括缓存null值、使用前缀和自定义过期时间,并提供了改造代码以实现缓存到期时间的个性化设置。
|
7天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
9天前
|
Java 关系型数据库 数据库
【SpringBoot系列】微服务集成Flyway
【4月更文挑战第7天】SpringBoot微服务集成Flyway
【SpringBoot系列】微服务集成Flyway