maven多模块项目管理,整合spring mybatis,多模块划分:web层,service层,persist层,其他(capthca验证码):
Уже реализован бэкенд-менеджмент с использованием RBAC и интеграцией easyui для выполнения CRUD-функций.
Часть обновления:
20150504:
20150509:
20150523:
20150225:
20150526:
20150527:
20150528:
20150601:
20150602:
20150608: Для persist слоя используется MapperScannerConfigurer для автоматического создания MapperFactoryBean для каждого bean. Для service слоя используются context:annotation-config и context:component-scan для автоматической настройки beans.
20150623: Создан webapp проект MutiModule-ueditorDemo для демонстрации использования ueditor. Создан quickstart проект MutiModule-uedirotClass с модифицированными java классами и сервлетами для ueditor. Ресурсы ueditor (js/css/image) разделены на два проекта: MutiModule-ueditor и MutiModule-ueditorClass.
20150624: Добавлен модуль MutiModule-logback для централизованной обработки логов.
20150625: В service слое реализован функционал для работы с Redis. Проведено тестирование с использованием SerializablePojoRedisTest.
20150701: Добавлены модули MutiModule-upload и MutiModule-common. MutiModule-service слой использует Redis для хранения данных.
20150704: Модуль MutiModule-upload перемещён в MutiModule-common, а MutiModule-kindeditorClass удалён. Файлы, связанные с загрузкой файлов, перемещены в MutiModule-common.
Удалён модуль MutiModule-upload, и функциональность загрузки файлов перемещена в MutiModule-kindeditorDemo.
Файлы, связанные с обработкой файлов, перенесены в MutiModule-kindeditorDemo, где используется ajaxfileupload.js для загрузки файлов.
20150706: Реализована обработка изображений с использованием GraphicsMagick и im4java.
20150709: Разработан класс DesUtilss для симметричного шифрования и дешифрования данных с использованием BASE64DecoderReplace.
20150710: Добавлен модуль MutiModule-citySelect для выбора адресов с использованием jQuery.
20150711: Расширены возможности модуля MutiModule-common с использованием mybatis-generator-maven-plugin для добавления функционала пагинации.
В модуле MutiModule-perisit реализованы дополнительные функции для работы с данными. mybatis-generator-maven-plugin: после генерации файлов, соответствующих структуре таблицы Demo, завершена функция модульного тестирования.
#20150713
С помощью нового плагина mybatis-generator-maven-plugin исправлены несоответствия требованиям (структура таблицы связей — составной первичный ключ, именование полей в стиле «верблюжий регистр»).
mybatis-generator-maven-plugin используется для указания атрибутов автоматического создания первичного ключа (поля identity или sequences). Если этот элемент указан, MBG вставляет элемент в сгенерированный файл SQL-отображения insert.
XmlParserUtilss использует dom4j для обработки XML и предоставляет общие методы.
#20150714
Поддержка методов XmlParserUtilss. Добавлен метод генерации строки XML, см. раздел модульных тестов GenerateXMLTest.
#20150715
В XmlUtilss добавлен метод для анализа элементов тегов XML.
#20150717
Модуль MutiModule-web определён как модуль для бэкенд-управления, обеспечено разделение между фронтенд и бэкенд модулями, а также внесены изменения в часть запроса ссылок, чтобы удалить ненужный admin. Интегрированы функции kindeditor в модуль MutiModule-web, при этом различается пространство файлов разных пользователей, что предотвращает доступ других пользователей к файлам, загруженным одним пользователем, и их использование.
fileUpload?contextPath=admin&detailPath=anonymous fileManager?contextPath=admin&detailPath=1
Для загрузки файлов и управления файлами реализованы два сервлета, которые передают следующие параметры:
#20150718
Исправлена ошибка, из-за которой файл стиля не загружался при входе на главную страницу: Resource interpreted as Stylesheet but transferred with MIME type text/html. Добавлена функция перенаправления по умолчанию в файле index.jsp.
#20150721
Шаблон URL, соответствующий файлу фильтра веб-модуля LoginFilter, установлен как /*, и установлены параметры фильтрации URL (init-param), чтобы предотвратить ненужную фильтрацию ресурсов. Исправлена часть ошибки.
#20150722
В веб-модуле, http://127.0.0.1:8080/MutiModule-web/demo/page/5, в классе контроллера DemoController.java добавлена функция разбиения на страницы для интерфейса, добавлен плагин jquery.jqpagination.js для разбивки на страницы и выполнена обработка функций.
#20150723
Добавлен класс для чтения файлов конфигурации, который считывает содержимое файла конфигурации и помещает его в кэш. Для получения значения из файла конфигурации достаточно вызвать метод getXXX(). Добавлен файл sso.properties для чтения конфигурации файла sso для одноточечного входа в систему. Добавлены три подмодуля webapp: ssoAuth, ssoDemo1 и ssoDemo2 для реализации функции одноточечной аутентификации. При локальном тестировании необходимо изменить конфигурацию зависимого общего модуля в файле sso.properties и загрузить три элемента webapp в путь Tomcat. ssoAuth: модуль проверки подлинности для одноточечного входа. В настоящее время для успешного входа требуется только совпадение имени пользователя и пароля. ssoDemo1: клиентский терминал одноточечного входа 1. http://127.0.0.1:8080/MutiModule-ssoDemo1/userCenter ssoDemo2: клиентский терминал одноточечного входа 2. http://127.0.0.1:8080/MutiModule-ssoDemo2/userCenter
#20180724
Добавлена часть модульного теста BinaryTest, использующая двоичные данные, где каждая цифра представляет различную информацию о пользователе. Обратите внимание, что сохранение информации о пользователе ограничено количеством битов Integer, которое нельзя произвольно расширить. Если расширение слишком велико, можно рассмотреть возможность использования типа String для хранения чисел.
#20150725
Добавлены базовые географические данные (провинция, город, район) в базу данных, связанные с persist/service, завершены модульные тесты для selectByPrimaryKey. На следующем этапе будет поддерживаться управление провинцией, городом и районом в веб-модуле (CRUD).
#20150727
Завершена функция асинхронной загрузки древовидной структуры zTree в веб-модуль для базовых географических данных (провинция, город, район). На следующем шаге будет реализована функция CRUD. В persist-слое generatorConfig.xml добавлены два параметра настройки beginningDelimiter и endingDelimiter, чтобы заменить символы по умолчанию («) в сгенерированном файле sql.xml. Это уменьшает необходимость ручного изменения * .xml файлов после каждого использования инструмента генерации кода для удаления символов «».
#20150728
Исправлено началоDelimiter и окончаниеDelimiter для создания проблем со старыми кодами. Реализована функция поиска условий в бэкенде веб-модуля.
#20150730
Интеграция модуля lucene требует дальнейшей оптимизации. Добавлены функции прямого доступа к базе данных в persist-слое для выполнения операций с сущностями (индексация файлов и разбиение на страницы с высоким уровнем поиска).
#20150801
Добавлены модули MutiModule-lucene. LuceneIncreTest.java (операции инкрементного индексирования), LuceneUpdateTest.java (операции обновления индекса) и LuceneDeleteTest.java (операции удаления индекса). Исправлены устаревшие коды в MutiModule-persist: beginningDelimiter и endingDelimiter не были настроены, вызывая проблемы. addCriterion(""id" >=", value, ""id"") изменено на addCriterion("id >=", value, "id"). Добавлены DemoTransientListStringTest и DemoTransientEnumTest для модульных тестов. Они могут сохранять несколько путей к изображениям в формате JSON и могут сохранять и извлекать данные enum в формате JSON соответственно.
#20150803
Добавлен статический модуль MutiModule, который завершает настройку статических ресурсов (js/css/image и т. д.) в этом модуле. Статические ресурсы отделены от динамических для подготовки к разделению. Модульные тесты см.: MutiModule-ssoAuth, MutiModule-ssoDemo1, MutiModule-ssoDemo2 и MutiModule-static. Глобальный перехватчик добавлен в веб-слой для увеличения охвата context_ и уменьшения количества кода jsp. В persist layer generatorConfig.xml добавлено поле deleteFlag типа enum, и завершено соответствующее модульное тестирование.
#20150804
Информация о контексте не включена. Веб-слой, бэкенд easyUI: использование новых страниц вместо диалоговых окон
Подробности см. в файле DemoController.java веб-слоя.
Дальнейшие шаги:
Завершить выделение easyui_dataGrid_blank_extend.js. Доработать отображение данных и некоторые общие функции.
Изменить пул соединений с базой данных, использовать Druid. Добавить некоторые функции мониторинга. Подробности см. в разделе сервлетов файла web.xml веб-модуля.
Информация о мониторинге, отображаемая StatViewSerlvet, является чувствительной. Это внутренняя информация о работе системы. Если вам необходимо контролировать доступ, вы можете настроить параметры allow и deny.
Настроить защиту от SQL-инъекций для слоя персистентности Druid.
Зашифровать пароль базы данных в слое персистентности Druid.
Добавить функции CMS-модуля;
В модуле MutiModule-common увеличить функциональность распределённого первичного ключа (стратегия генерации первичного ключа Twitter/Snowflake). Завершить юнит-тестирование. См. метод IdWorkerTest.testIdWorkerInstance().
Обратите внимание, что в разных распределённых средах необходимо использовать разные конфигурации файла idWorker.properties. В противном случае может возникнуть ситуация дублирования первичных ключей.
Реализовать и пройти тестирование кода JAVA SPI.
Создать модули MutiModule-Dubbo-RWSeperator-*. Протестировать создание распределённой системы Dubbo.
API-модуль — это выделенный интерфейсный модуль. Обратите внимание на разделение модулей чтения и записи.
Модуль персистентности — это уровень постоянного хранения данных.
Бизнес-уровень разделён на два модуля: чтение и запись. С точки зрения бизнес-логики интерфейсы чтения и записи разделены на разные модули. Это обеспечивает разделение интерфейсов чтения и записи при последующем обслуживании и облегчает горизонтальное расширение (на уровне кода и базы данных).
Структура модулей:
&& //
Изменения в этой структуре:
Поставщик услуг добавляет некоторые функции мониторинга Druid. Добавлены только некоторые функции мониторинга, которые могут быть настроены в соответствии с требованиями бизнеса.
Написать генератор кода для модулей MutiModule-Dubbo-RWSeperate-*, чтобы уменьшить объём повторяющегося кода, написанного вручную. Создать код для sysmanUser и sysmanRole. Тестирование прошло успешно.
Использовать шаблон inspinia+ для модуля MutiModule-Dubbo-RWSeperate-consumer-web. Интегрировать функции входа и меню слева (максимально три уровня меню). Продолжение следует...
Включить декоратор sitemesh. Выделить общие части страниц для последующего отображения. Позже сосредоточиться на отображении страниц, связанных с бизнесом.
Следующие шаги включают добавление AOP. Часть данных левого меню будет отображаться в AOP.
Далее добавить класс BaseController для выделения общих методов. Достаточно унаследовать этот метод, чтобы реализовать простые функции CRUD.
Модуль MutiModule-Dubbo-RWSeperate-consumer-web:
Реализация функций списка. Завершены только функции отображения данных списка (с использованием шаблона inspinia, данные списка отображаются при обновлении страницы).
Интеграция функций разбивки на страницы в модуль Dubbo-RWSeperate-consumer-web (используя шаблон inspinia):
Простая реализация WebSocket (на основе spring4.x):
Браузер может установить соединение с сервером и отправлять и получать данные через уже установленное соединение без дополнительных накладных расходов HTTP-протокола.
Доступ к http://192.168.60.134:8080/MutiModule-WebSocket/start для подключения. После этого введите два целых числа и нажмите кнопку Send to Add, чтобы отправить запрос на сервер.
Сервер получает запрос и возвращает результат, который отображается на странице.
Можно рассматривать как своего рода длительное соединение, которое не требует дополнительных затрат из-за HTTP-протокола во время соединения.
Примечание: в этом примере файл web.xml почти пуст. В версии spring 4.x примеры кода на GitHub показывают, что файл web.xml практически пуст, и конфигурация XML заменяется аннотациями для уменьшения объёма написания файлов конфигурации XML. В этом примере используется этот подход, который требует простого понимания.
Создание связи между Echarts и WebSocket:
Echarts инициализируется на странице, клиент (браузер) напрямую устанавливает длинное соединение с сервером. Впоследствии сервер активно отправляет сообщения клиенту, и страница Echart начинает обновляться.
Демо:
Таким образом решается проблема взаимодействия между Echarts и WebSocket, и можно управлять отображением содержимого клиентской страницы с помощью сервера.
Изменение версии в pom.xml: org.apache.maven.plugins maven-compiler-plugin 2.5
Добавление в файл generatorConfig.xml:
<columnOverride column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
Конфигурация;
Предотвратить MySQL в процессе использования от потери точности (часы, минуты, секунды);
И исправить проблемы, которые были в структуре трёх таблиц sysmanUser, sysmanRole и sysmanResource;
Исправить: в mapper.xml файле jdbcType изменить с Date на #{createTime,jdbcType=TIMESTAMP}.
2016010
comsumer-web модуль: добавить в список на странице list следующие JS и CSS; решить проблему адаптации под маленькие экраны и мобильные устройства; реализовать адаптивную вёрстку для списка страниц.
Согласовать больше, чем настроить, согласовать структуру пакета и правила именования.
20160103
Добавить модуль MutiModule-Hadoop для простого тестирования функций Hadoop, на данном этапе реализована простая функция подсчёта количества раз.
20160124
Добавить Dubbo-RWSeperate модуль: часть запуска Jetty;
добавить плагин json2.js для решения проблемы разбора JSON на стороне клиента;
добавить плагин jquery.cookie.js для решения проблемы работы с cookie на стороне клиента. На стороне клиента для эффективного использования cookie создан объект для хранения нескольких значений cookie, решая проблему ограничения количества cookie (также необходимо учитывать ограничение размера cookie).
20160226
Comsumer-web модуль: добавлен класс BaseEmptyController для решения проблем с AOP (LeftMenuDataAop), когда некоторые методы не требуют зависимости от BaseController.
Класс public class BaseController расширяет BaseEmptyController.
Consumer-web модуль: если нет соответствующих прав, то левое меню не отображается.
20160229
Consumer-web модуль: исправлена ошибка в таблице sys_sysmanresource, связанная с сохранением данных в поле parent_ids.
Исправлена ошибка в файле jquery.metisMenu.js, которая приводила к повторному отображению меню.
Код:
$('#li-' + leftMenuId).addClass("active");
$('#li-nav-second-' + leftMenuId).addClass("active");
$('#ul-nav-second-' + leftMenuId).addClass("collapse in");
$('#ul-nav-third-' + leftMenuId).attr('aria-expanded', true);
$('#ul-nav-third-' + leftMenuId).addClass("collapse in");
$('#li-' + leftMenuId + ' .collapse').removeClass("collapse" );
20160301
Common модуль: добавлены операции с базой данных файлов для реализации функций CRUD с использованием файлов в качестве ресурсов.
FileDatabaseHelperTest — это тестовый файл для получения информации из консоли и выполнения операций CRUD.
20160302
Common модуль: добавлена простая реализация алгоритма согласованного хеширования.
Файл класса com.MutiModule.common.utils.hash.ConsistentHash.
20160307
Добавлен модуль MutiModule-simpleRPC для реализации простой функции RPC с использованием динамического прокси (java.lang.reflect.Proxy) и программирования сокетов.
Включает в себя модульные тесты RpcConsumer и RpcProvider.
Consumer-web модуль: на странице входа добавлено перенаправление на страницу, которую пользователь хочет посетить после входа.
Данные левого меню отображаются без зависимости от cookie, чтобы предотвратить проблемы с отображением при смене браузера.
Логика обработки находится в AOP, файл LeftMenuDataAop.java.
Common модуль: добавлено преобразование коллекции объектов в структуру свойств.
В пакете com.MutiModule.common.treeNode в папке /src/test/java.
Подробности см. в ToTreeNodeTest.java для модульных тестов.
20160308
Dubbo-consumer модуль: добавлены разрешения на уровне кнопок.
Решение: в конфигурации ресурсов на сервере добавлены разрешения на уровне кнопок, и они назначаются при распределении ролей.
Важно, чтобы имена кнопок в интерфейсе соответствовали именам ресурсов, что позволяет контролировать доступ на основе уровня кнопок.
Dubbo-persist модуль: обновлены файлы базы данных.
Модули Dubbo-consumer, Dubbo-provider-read и Dubbo-provider-write:
извлечена конфигурация XML <dubbo:registry protocol="zookeeper" address="192.168.2.211:2181" /> из модулей и помещена в модуль Dubbo-api, уменьшая дублирование кода.
2060310
В модуле Dubbo-consumer с разрешениями на уровне кнопок нельзя использовать разрешения на уровне кнопок.
SpringMVC поддерживает UTF-8 для китайского языка. Если SpringMVC возвращает строку String, могут возникнуть проблемы с кодировкой китайских символов. Можно использовать следующий код:
@RequestMapping(value = "/utf8Test", produces = "application/json; charset=utf-8")
@ResponseBody
public String utf8Test() {
Map<String, String> map = new HashMap<String, String>();
map.put("alexgaoyh", "中国");
return JSONUtilss.toJSon(map);
}
Если есть метод, подобный описанному выше, и он вызывается через браузер, китайские символы могут отображаться некорректно. В этом случае необходимо обратить внимание на раздел produces = "application/json; charset=utf-8".
20160311
Следующий шаг — определить, можно ли реализовать функцию бесконечного уровня для операций меню.
20160321
Обновлён пакет org.json.json, в common модуле добавлен метод преобразования строки XML в строку JSON.
20160318
Для модулей Dubbo-* добавлена поддержка CRUD для одного ко многим.
Обратите внимание на формат SQL для правой стороны, выполнение MySQL может вызвать проблемы: delete mutidatabase a.
20160319
Добавлена зависимость CFX для решения проблемы прямого вызова веб-сервиса в модульном тесте com.MutiModule.common.soap.cfx.CFXWebServiceTest.
20160321
Модуль Dubbo-consumer: добавлена многосторонняя операция CRUD, включая обработку удаления.
20160322
Модуль Dubbo-consumer: исправлены ошибки, связанные с неудачным запросом данных при отсутствии значения в нескольких сторонах и исключением nullpointer при использовании цикла for.
Модуль Dubbo-write: исправлена проблема с удалением данных на нескольких сторонах.
Зависимость модуля MutiModule-upload: решена проблема с операцией загрузки изображений, используя функциональность webuploader. Дуббо-персист модуль: стандартизация структуры таблиц
sys_sysmanuser — sys_sysman_user, используется режим разделения слов с помощью подчёркивания.
Файлы базы данных уже отправлены в модуль Dubbo-RWSeperate-persist.
Модуль Dubbo-RWSeperate-
Все таблицы, связанные с фоновым RABC, обрабатываются и преобразуются с использованием пользовательского универсального метода; локально расширен плагин mybatis-generator для создания пользовательских плагинов для обработки базовых функций. В случае появления новых бизнес-логик этот пользовательский плагин будет расширен повторно.
Дуббо-RWSeperate-*, модуль:
Свойства поля ID изменены на строковый тип. Свойства поля createTime изменены на строковый тип. Это в определённой степени решает проблему независимости базы данных. Следует отметить, что на текущем этапе для обеспечения проблемы часового пояса формат времени в базе данных хранится в формате времени зоны 0 (GMT), а после запроса данные автоматически преобразуются в формат времени часового пояса системы.
GMT — это аббревиатура от Greenwich Mean Time, что означает время по Гринвичу.
Изменения в базе данных, скрипт для просмотра doc-папки модуля persist.
Dubbo-RWS-*, модуль:*
Реализована функция асинхронной загрузки больших объёмов данных для модуля zTree информации о провинциях, городах и районах. Реализована функция преобразования IP-адресов в географические названия: библиотека отображения IP-адресов на географические названия (см. комментарии к классу IP2RegionUtilss в модуле common).
Dubbo-RWS-persist: добавление пользовательских аннотаций в классы model*
Для последующей реализации прав доступа к данным в процессе генерации классов model добавлены части кода для генерации пользовательских аннотаций.
Dubbo-RWSeperate-provider-read, модуль:
Добавлены аннотации AOP для тестирования решения проблем с правами доступа к данным. Обратите внимание на файлы классов в пакете com.alexgaoyh.MutiModule.Dubbo.RWSeperate.provider.read.dataAuthority.annotation. Один из них предназначен для методов (method) и указывает, что для этого метода требуется установить права доступа к данным, которые необходимо добавить перед выполнением. Другой предназначен для классов (class) и указывает, что этому классу требуется дополнительная настройка прав доступа к данным, где className используется для хранения абсолютного пути реального связанного класса сущности.
Используя метод AOP, соответствующие данные конфигурации прав доступа динамически загружаются в параметры ввода перед выполнением метода service. Способ использования: добавьте DataAuthorityMethodAnnotation в часть реализации метода service, который требует внедрения прав доступа к данным; добавьте DataAuthorityClassAnnotation в класс реализации service (и одновременно добавьте часть className (абсолютный путь класса сущности)) и добавьте соответствующие аннотации SqlModelVO, см. файл класса com.alexgaoyh.MutiModule.Dubbo.RWSeperate.provider.read.dataAuthority.aspect.test.vo.DictDictionaryVOUtilss, можно протестировать через тестовый пример DictDictionaryTest.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )