реактивное программированиеОтносится к управляемой данными, асинхронной и параллельной парадигме программирования. Короче говоря, программирование асинхронного потока данных. Создавайте, комбинируйте, фильтруйте, преобразовывайте и другие операции над потоком данных и, наконец, получайте необходимую обработку и результаты. Он отличается высокой производительностью, управляемостью событиями, полным использованием вычислительных ресурсов и более элегантным интерфейсом асинхронного программирования.В то же время он также обеспечивает механизм обратного давления для предотвращения перегрузки системы. Типичные рамки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();
}
}
Стартовый проект
тестовый 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/, чтобы представить…