Разделение фронтенда и бэкенда, использование JWT для аутентификации. Проект фронта front-springrain.
Основной проект микросервиса springrain-system-web, реализованный с использованием K8S + Apisix/Istio для создания облачной микросервисной архитектуры.
Возможность быстрого переключения между различными режимами развёртки (монолит, слой за слоем, микросервисы) без изменения бизнес-логики.
Интеграция Seata для управления распределёнными транзакциями.
Поддержка независимого запуска фронтендов и бэкендов каждого модуля, а также возможность их бесшовной интеграции для создания пакетов по требованию.## Как это работает?
При запуске приложения проверяется наличие реализации сервиса на локальной машине. Если её нет, то запускается gRPC для удалённого вызова методов. Разработчики этого не замечают.
Используется Seata для управления распределёнными транзакциями. Поддерживается использование аннотаций и без них (разработчики этого не замечают, теоретически существует риск потери синхронизации, но если правильно организовать логирование, этот риск минимальен).
Используются Services K8S для регистрации и обнаружения сервисов, ConfigMaps для конфигурационного центра. Разработчики этого не замечают.
Используются Apisix/Istio для обнаружения, мониторинга, размыкания и ограничения доступа к микросервисам. Разработчики этого не замечают.
Подробное описание архитектурного решения доступно по ссылке: https://www.jiagou.com/web/58-cloud-native-service-mesh/* Названия интерфейсов и реализаций должны соответствовать строгому соглашению.
t
, затем вызывает другой сервис, который также обновляет ту же таблицу t
. Это приведёт к состоянию deadlock.HttpRequest
.https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/doc
https://gitee.com/chunanyong/springrain/tree/master/springrain-gencode
https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/sql
// Для простого примера достаточно одного сервиса для управления любой таблицей базы данных
//@Test Получение объекта
public void testObject() throws Exception {
// Finder finder = new Finder("select id from t_user where 1=1 ");
Finder finder = Finder.getSelectFinder(User.class, "id").append(" WHERE 1=1 ");
finder.append(" AND id=:userId ").setParam("userId", "admin");
String id = baseDemoService.queryForObject(finder, String.class);
System.out.println(id);
}
//@Test Получение объекта пользователя
public void testObjectUser() throws Exception {
// Finder finder = new Finder("select * from t_user where id=:userId order by id");
Finder finder = Finder.getSelectFinder(User.class).append(" WHERE id=:userId ORDER BY id DESC ");
finder.setParam("userId", "admin");
User u = baseDemoService.queryForObject(finder, User.class);
System.out.println(u.getName());
}
``````markdown
//@Test Получение пагинированного списка
public void testMsSql() throws Exception {
// Finder finder = new Finder("select * from t_user order by id");
Finder finder = Finder.getSelectFinder(User.class).append(" order by id desc ");
List<User> list = baseDemoService.queryForList(finder, User.class, new Page(2));
System.out.println(list.size());
for (User s : list) {
System.out.println(s.getName());
}
}
//@Test Вызов хранимой процедуры базы данных
public void testProc() throws Exception {
Finder finder = new Finder();
finder.setParam("unitId", 0);
finder.setProcName("proc_up");
Map queryObjectByProc = (Map) baseDemoService.queryObjectByProc(finder);
System.out.println(queryObjectByProc.get("#update-count-10"));
}
//@Test Вызов базовой функции базы данных public void testFunction() throws Exception { Finder finder = new Finder(); finder.setFunName("fun_userId"); finder.setParam("userId", "admin"); String userName = baseDemoService.queryForObjectByFunction(finder, String.class); System.out.println(userName); }
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )