Spring Webflux использует R2DBC для подключения к MySql

Spring Boot
Spring Webflux использует R2DBC для подключения к MySql

реактивное программированиеОтносится к управляемой данными, асинхронной и параллельной парадигме программирования. Короче говоря, программирование асинхронного потока данных. Создавайте, комбинируйте, фильтруйте, преобразовывайте и другие операции над потоком данных и, наконец, получайте необходимую обработку и результаты. Он отличается высокой производительностью, управляемостью событиями, полным использованием вычислительных ресурсов и более элегантным интерфейсом асинхронного программирования.В то же время он также обеспечивает механизм обратного давления для предотвращения перегрузки системы. Типичные рамкиRxJava,ReactorЖдать.

Долгое время отзывчивость Java могла взаимодействовать только с нереляционными базами данных, такими как MongoDB и Redis. В настоящее время большая часть наших данных по-прежнему хранится в реляционных базах данных.В большинстве случаев Java использует JDBC для работы с реляционными базами данных, а JDBC является блокирующим и синхронным. Следовательно, существует острая необходимость в управляемом базой данных протоколе, поддерживающем быстродействие. В настоящее время на рынке существует два адаптивных протокола драйверов баз данных: ADBA и R2DBC.

R2BDC родился, потому что Spring официально выпустил реактивный веб-фреймворк в Spring 5.Spring WebFluxПосле этого возникает острая потребность в API-интерфейсах взаимодействия с базой данных, которые могут удовлетворять асинхронные ответы. Из-за отсутствия стандартов и драйверов команда Pivotal (официальная Spring) начала изучать Reactive Relational Database Connectivity и предложилаR2DBCСпецификация API для оценки осуществимости и обсуждения заинтересованности поставщиков баз данных в поддержке реактивных асинхронных неблокирующих драйверов. Сначала толькоPostgreSQL,H2,MSSQLтри, сейчасMySQLтоже присоединился. Последняя версия R2DBC — 0.8.1.RELEASE. В дополнение к реализации драйвера, он также обеспечиваетПул соединений R2DBCа такжеR2DBC-прокси. Кроме того, поддерживаются облачные приложения.

После Spring Boot 2.3.0.RELEASE официально поддерживается драйвер MySQL на базе r2dbc.

СоздаватьSpring WebFluxИспользуйте R2DBC для работыMySQLЭто также очень просто, если у вас есть предварительное представление о WebFlux.

импортировать соответствующие зависимости

  	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>dev.miku</groupId>
            <artifactId>r2dbc-mysql</artifactId>
        </dependency>

Адрес подключения конфигурации файла конфигурации

spring:
    r2dbc:
        password: admin
        url: r2dbcs:mysql://localhost:3306/test_db
        username: root

Кодирование — построить реляционное сопоставление базы данных

@Data
@Table("mall_ad")
public class AdBean {

    @Id
    private Integer id;

    private String name;

    private String link;

    private String url;

    private String content;

    private LocalDateTime startTime;

    private LocalDateTime endTime;

    private Byte deleted;
}

кодирование - сборка vo

@Data
@Builder
public class AdVo {

    private String name;

    private String link;

    private String url;

    private String content;
}

Кодирование - создание объектов операций с базой данных

public interface AdRepository extends ReactiveCrudRepository<AdBean,Integer> {

}

Кодирование - сервис сборки

@Service
public class AdServiceImpl implements AdService {


    @Autowired
    private AdRepository adRepository;

    /**
     * 查询现在的的广告
     *
     * @return
     */
    @Override
    public Flux<AdVo> findAll() {

	//这里对于stream操作需要有一定的了解
        return adRepository.findAll().map(
                adBean -> AdVo.builder()
                        .name(adBean.getName()).link(adBean.getLink())
                        .url(adBean.getUrl()).content(adBean.getContent())
                        .build()
        );
    }
}

Кодирование - сборка контроллера

@RestController
@RequestMapping("/api/ad")
public class AdController {

    @Autowired
    private AdService adService;

    @GetMapping("/findAll")
    public Flux<AdVo> findNowAd() {
        return adService.findAll();
    }
}

Стартовый проект

1595255204549

тестовый API

// 20200720213921
// http://127.0.0.1:8080/api/ad/findAll/

[
  {
    "name": "合作 谁是你的菜",
    "link": "",
    "url": "http://yanxuan.nosdn.127.net/65091eebc48899298171c2eb6696fe27.jpg",
    "content": "合作 谁是你的菜"
  },
  {
    "name": "活动 美食节",
    "link": "",
    "url": "http://yanxuan.nosdn.127.net/bff2e49136fcef1fd829f5036e07f116.jpg",
    "content": "活动 美食节"
  },
  {
    "name": "活动 母亲节",
    "link": "",
    "url": "http://yanxuan.nosdn.127.net/8e50c65fda145e6dd1bf4fb7ee0fcecc.jpg",
    "content": "活动 母亲节5"
  }
]

полный адрес проектаgit ee.com/, чтобы представить…