loveqq-framework, легковесный ioc/aop/javafx фреймворк
Легковесный ioc/aop фреймворк с более мощной условной инференцией, чем Spring; абстрагирует MVC модель, предоставляя встроенные серверы reactor-netty и tomcat; Предоставляет фреймворк javafx mvvm, который позволяет реализовать двустороннее связывание модели и данных; поддерживает динамическое конфигурирование источников данных; предоставляет аннотированную кэшировку; Включает аспекты, reactor-netty, tomcat, nacos, feign, mybatis, spring-tx, jsr303-valid, logback, jakarta-mail, quartz, xxl-job, pagehelper, redisson, shiro, thymeleaf, автоматическую конфигурацию источников данных, генератор уникальных идентификаторов Baidu и другие часто используемые компоненты; По умолчанию предоставляет метод упаковки jar-пакетов с минимизацией размера, поддерживающий запуск через jarindex, что обеспечивает более быстрое время запуска; Предоставлен Ruoyi-for-loveqq версия, заменяющая Spring и все его starter'ы, готовая к использованию.
Проектная основа, включающая некоторые общие утилиты, запуск jar index, инструменты для обобщённых типов, инструменты доступа к базе данных JDBC, инструменты упаковки bean, инструменты чтения пакетов, инструменты преобразования json и интерфейсы автоматической конфигурации, аннотации автоматической конфигурации и т.д. Детали см. в README.md модуля loveqq-core.## loveqq-boot Конкретная реализация контейнера IoC, автоматическая сборка, прокси-сервер области действия (одиночный/прототип/обновление), ленивая загрузка прокси, автоматическое привязывание свойств конфигурационных файлов (поддерживает сложные вложенные типы), условные аннотации, проверка условий JSR, асинхронные события, динамическое проксирование, SPI, пользовательский загрузчик классов jar index и т. д. Детали см. в README.md модуля loveqq-boot.
Модуль AOP, поддерживающий совпадение путей Ant, совпадение типов аннотаций, интеграцию поддержки AspectJ для совпадения выражений pointcut. Детали см. в README.md модуля loveqq-aop.
Запускатель источников данных, поддерживающий автоматическую конфигурацию HikariCP, Druid, Tomcat-jdbc, динамическое конфигурирование источников данных. Детали см. в README.md модуля loveqq-boot-starter-datasource.
Инструменты доступа к базе данных, основанные на прокси, реализующие интерфейсный доступ JDBC, поддерживающие аннотированное написание SQL или динамическое SQL на основе движков шаблонов (например: Enjoy/Freemarker).
Генератор кода и шаблоны по умолчанию, поддерживающие шаблоны программирования Java, Enjoy/Freemarker, а также шаблоны JSP (требуется поддержка k-jte) или пользовательские движки шаблонов.## loveqq-mvc-core Основной MVC абстрактный слой, используемый для адаптации к различным веб-серверам, включающий регистрацию маршрутов, привязку параметров, распределение запросов, запросы-фильтры и т.д. Дополнительные сведения см. в README.md модуля loveqq-mvc-core.
Реализация MVC-паттерна для сервлетов, включает реализацию DispatcherServlet, а также автоматическое конфигурирование Filter и Servlet. Соответствующий запускатель — loveqq-boot-starter-tomcat. Дополнительные сведения см. в README.md модуля loveqq-mvc-servlet.
Реализация MVC-паттерна для Netty, включает реализацию DispatcherHandler и автоматическое конфигурирование пользовательских Filter. Соответствующий запускатель — loveqq-boot-starter-netty. Дополнительные сведения см. в README.md модуля loveqq-mvc-netty.
Основной абстрактный слой кэширования loveqq, по умолчанию использует кэширование в памяти. Поддерживает аннотации кэширования, унифицированный подход к использованию командного и реактивного стилей кэширования. Дополнительные сведения см. в README.md модуля loveqq-cache-core.
Реализация кэширования loveqq на основе Redis
Обязательный модуль для запуска микросервисной архитектуры## loveqq-boot-starter-validator Интеграция jsr303-validation и добавление пользовательских аннотаций ограничений, что позволяет реализовать динамическую проверку согласованности на основе выражений OGNL.## loveqq-boot-starter-discovery-nacos/loveqq-boot-starter-config-nacos Интеграция сервиса открытия и конфигурации Nacos
Интеграция автоматического конфигурирования Dubbo
Интеграция автоматического конфигурирования Feign, совместимое использование с центром регистрации, поддержка loveqq-mvc аннотаций
Интеграция автоматического конфигурирования RocketMQ
Интеграция поддержки Redis на основе Redisson, а также встроенная простая реализация MQ на основе Redis
Быстрое создание SDK, требует только написания моделей запросов и ответов, поддерживает фильтры, легко расширяемо, поддерживает командный и реактивный стили.
Фреймворк javafx mvvm, реализующий двустороннее связывание представлений и моделей данных. В коде достаточно оперировать данными, чтобы они отражались в представлении, а изменения данных в представлении отражались в модели. Дополнительные сведения см. в README.md модуля loveqq-javafx.
Основанный на фреймворке loveqq монолитный вариант Ruoyi, который удаляет нижележащие зависимости от Spring и его Spring Boot Starter. Подробнее смотрите в списке репозиториев.
package com.kfyty.demo;
``````markdown
import com.kfyty.loveqq.framework.boot.K;
import com.kfyty.loveqq.framework.boot.validator.annotation.Condition;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.Async;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.SpringBootApplication;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.EventListener;
import com.kfyty.loveqq.framework.core.event.ContextRefreshedEvent;
import com.kfyty.loveqq.framework.data.cache.core.annotation.Cacheable;
import com.kfyty.loveqq.framework.web.core.annotation.GetMapping;
import com.kfyty.loveqq.framework.web.core.autoconfig.annotation.EnableWebMvc;
import lombok.Data;
``````java
@Async
@EnableWebMvc
@EventListener
@SpringBootApplication
public class Main {
public static void main(String[] args) {
K.run(Main.class, args);
}
@Cacheable
@GetMapping
public User hello(@Valid User user) {
return user;
}
@Async
@EventListener
public void onStarted(ContextRefreshedEvent event) {
log.info("start succeeded!");
}
@Data
public static class User {
@Condition(when = "type == 1", then = "photo != null", message = "type=1时,图片不能为空")
private Integer type;
private String photo;
}
}
Рекомендуется, чтобы проект наследовался от родительского модуля loveqq-framework
<parent>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-framework</artifactId>
<version>1.1.3-M2</version>
</parent>
<dependencies>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot-starter-logback</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
</dependencies>
При сборке необходимо добавить следующую конфигурацию в подмодуль, чтобы указать запускающий класс и сгенерировать jar index
<properties>
<boot-start-class>com.kfyty.demo.Main</boot-start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
Необходимо добавить следующие зависимости
apply plugin: 'java'
group = 'com.kfyty.example'
version = '1.0-SNAPSHOT'
ext {
bootLibOutput = 'boot-lib'
bootMainClass = 'com.kfyty.loveqq.framework.core.support.BootLauncher'
bootStartClass = 'com.kfyty.demo.Main'
}
```dependencies {
implementation 'com.kfyty:loveqq-framework:1.1.3-M2@pom'
implementation 'com.kfyty:loveqq-boot:1.1.3-M2'
implementation 'com.kfyty:loveqq-boot-starter-logback:1.1.3-M2'
implementation 'org.ow2.asm:asm:9.5'
implementation 'org.javassist:javassist:3.29.0-GA'
compileOnly "org.projectlombok:lombok:1.18.30"
annotationProcessor "org.projectlombok:lombok:1.18.30"
}allprojects {
compileJava {
options.encoding = "UTF-8"
}
}
При сборке проекта необходимо добавить следующие конфигурации в подмодули для установки запускаемого класса и создания индекса jar
// Копирование зависимостей
tasks.register('copyDependencies', Copy) {
from configurations.runtimeClasspath
into "$buildDir/libs/$rootProject.ext.bootLibOutput"
}
// Создание индекса jar
tasks.register('buildJarIndex', JavaExec) {
mainClass = 'com.kfyty.loveqq.framework.core.lang.task.BuildJarIndexAntTask'
classpath = configurations.runtimeClasspath
args "-OUTPUT_DIRECTORY=$project.buildDir/libs"
args "-OUTPUT_JAR=$project.name-$project.version.jar"
args "-OUTPUT_DEFAULT_JAR=$project.name-$project.version.jar"
}
// jar, замена по умолчанию jar
jar {
dependsOn copyDependencies
manifest {
attributes 'Main-Class': "$rootProject.ext.bootMainClass"
attributes 'Start-Class': "$rootProject.ext.bootStartClass"
attributes 'Class-Path': configurations.runtimeClasspath.files.collect { "$rootProject.ext.bootLibOutput/$it.name" }.join(' ')
}
}
// build, замена по умолчанию build
build {
dependsOn buildJarIndex
}
```dockerfile
FROM docker.m.daocloud.io/openjdk:17
ENV TZ=Asia/Shanghai
WORKDIR /app/demo
EXPOSE 9090
COPY ./target/demo-1.0-SNAPSHOT.jar /app/demo/demo-1.0-SNAPSHOT.jar
COPY ./target/boot-lib /app/demo/boot-lib
ENTRYPOINT ["java", "--add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED", "--add-opens=java.base/java.io=ALL-UNNAMED", "-jar", "demo-1.0-SNAPSHOT.jar"]
# -t устанавливает имя образа:тег
# -f указывает Dockerfile, если он переименован
# . указывает, что Dockerfile находится в текущей директории
# docker build -t demo:1.0 -f Dockerfile .
# -p указывает порты, 9090 (порт контейнера для внешнего доступа) направляется на 8080 (порт контейнера для внутреннего доступа)
# docker run -p 9090:8080 demo:1.0
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )