初识 Solon —— 进一步的准备

说明

为了简化和统一后续的开发,我们采用多模块的项目结构,引入 BOM 来统一管理依赖。本人并不擅长前端,前端不会过多讲解,主要基于 Sysbean Admin,后续的例子也将以对接 Sysbean Admin的接口作为例子进行讲解。

多模块

多模块的配置,可以参看 https://mp.weixin.qq.com/s/qXaZ7BCL_0-1hkqTGNxFmA。

在 IDEA 中通过 File->New->Modules... 可以创建新的模块。

先创建一个demo01的模块,然后把第一应用的文件移动到 demo01中(第一个应用的玩转例子保留在 start-up 的分支)。

之后再创建demo-parent模块,该模块用于统一管理依赖。

修改settings.gradle

补充说明写在注释中。

// 将demo,修改名称为porpoise-demo
rootProject.name = "porpoise-demo"

// 创建新模版后自动增加的内容可以不用调整
include 'demo01'
include 'demo-parent'

配置 build.gradle

补充说明写在注释中。

plugins {
    id 'java'
    id "io.freefair.lombok" version "8.11"
}

// 统一 jdk 版本号
def jdkVersion = 17
def demoVersion = "1.0.0"
// processor 的依赖需要指定版本号
def mapstructVersion = "1.6.3"
// processor 的依赖需要指定版本号
def easyQueryVersion = "2.4.14"

group = "com.example.demo"
version "${demoVersion}"

allprojects {
    repositories {
        mavenLocal()
        mavenCentral()
        // 增加腾讯云 maven 仓库镜像,提速。
        maven { url "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/" }
    }

    // 版本号传递
    ext["jdkVersion"] = "${jdkVersion}"
    ext["demoVersion"] = "${demoVersion}"
    ext["mapstructVersion"] = "${mapstructVersion}"
    ext["easyQueryVersion"] = "${easyQueryVersion}"

    tasks.withType(JavaCompile).tap {
        configureEach {
            options.encoding = "UTF-8"
            // 统一指定编译时保留参数名
            options.compilerArgs << "-parameters" << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
   
}

配置 demo-parant

增加dependencies.gradle

用于统一管理版本号。

ext {
    set("solonVersion", "3.0.7")
    set("esearchxVersion", "1.0.22")
    set("hikaricpVersion", "5.1.0")
    set("mysqlVersion", "8.0.28")
    set("hutoolVersion", "6.0.0-M18")
    set("transmittableThreadLocalVersion", "2.14.2")
}
配置 build.gradle

补充说明写在注释中。

plugins {
    // 使用 java-platform 可以统一管理 bom
    id 'java-platform'
    id 'maven-publish'
}

// 引入版本管理文件
apply from: "dependencies.gradle"

group 'com.example.demo'
version "${demoVersion}"

javaPlatform {
    allowDependencies()
}

dependencies {
    api platform("org.noear:solon-parent:${solonVersion}")
    
    constraints {
        api("com.zaxxer:HikariCP:${hikaricpVersion}")
        api("mysql:mysql-connector-java:${mysqlVersion}")
        api("com.easy-query:sql-solon-plugin:${easyQueryVersion}")
        api("org.noear:esearchx:${esearchxVersion}")
        api("org.dromara.hutool:hutool-all:${hutoolVersion}")
        api("org.mapstruct:mapstruct:${mapstructVersion}")
        api("com.alibaba:transmittable-thread-local:${transmittableThreadLocalVersion}")
    }
}

publishing {
    publications {
        //以下maven并非关键字,可自定义
        maven(MavenPublication) {
            //通过java-platform生成BOM
            from components.javaPlatform
        }
    }

    repositories {
        // 根据需要发布到不同的仓库,此处只是发布到本地
        mavenLocal()
    }
}

配置 demo01

配置 build.gradle

补充说明写在注释中。

plugins {
    id 'java'
    id "io.freefair.lombok"
}

group = "com.example"
// 统一版本号
version "${demoVersion}"
description = "Demo project for Solon"

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of("${jdkVersion}")
    }
}

dependencies {
    // 使用 demo-parent,依赖调整的最主要的位置
    implementation platform(project(":demo-parent"))

    implementation("org.noear:solon-web")
    implementation("org.noear:solon-view-freemarker")
    implementation("org.noear:solon-logging-logback")

    // 删除,已经用插件的方式引入了
    // compileOnly("org.projectlombok:lombok")
    testImplementation("org.noear:solon-test")
}


compileJava {
    options.encoding = "UTF-8"
    options.compilerArgs << "-parameters"
}

jar {
    manifest {
        attributes "Main-Class": "com.example.demo.App"
    }

    dependsOn(configurations.runtimeClasspath)

    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from(configurations.runtimeClasspath.collect {
        if (it.isDirectory()) it else zipTree(it)
    }) {
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/*.SF'
        exclude 'META-INF/*.DSA'
        exclude 'META-INF/*.RSA'
    }

    def sourcesMain = sourceSets.main
    sourcesMain.allSource.forEach { println("add from sources: ${it.name}") }
    from(sourcesMain.output)
}
重新运行demo01

日志中出现如下字样,表示项目结构调整成功,可通过浏览器调用进行测试。

App: End loading elapsed=258ms pid=32912 v=3.0.7

在这里插入图片描述

技术栈

后端

  • JDK 17
  • Gradle 8+
  • Solon 3.0.7
  • Easy-query 2.4.14
  • lombok 8.11
  • Mapstruct 1.6.3
  • Hutool 6.0.0-M18
  • MySQL 8+
  • Redis 6+

前端

具体参看其官方文档,https://docs.soybeanjs.cn/zh/guide/quick-start 。

  • Node 18.19.0+
  • pnpm 8.7.0+
  • Vue 3
  • Vite 4
  • TypeScript

小结

将项目调整为多模块结构,增加父BOM,并测试 demo01 可以正常运行,为后续项目的开发做好准备。

完整代码可以从 https://gitee.com/CrazyAirhead/porpoise-demo 获取。

05-10
### Solon框架简介 Solon 是一款由 Noear 领导开发的开源 Java 应用开发框架,旨在提供一种更加克制、简洁、高效且开放的开发方式[^4]。它吸收了 Spring Boot 和 Javalin 的优点,同时去除了冗余设计,从而实现了更轻量化的特性。 #### 主要特点 - **高性能**:相比传统框架,Solon 提升了约 300% 的并发处理能力和 50% 的内存节省效率。 - **快速启动**:应用程序启动速度提高了大约 10 倍,显著缩短了开发和部署周期。 - **轻量化**:项目打包后的体积仅为其他框架的 10%,极大减少了资源占用。 - **广泛兼容性**:支持从 Java 8 到 Java 22 的多个版本,并兼容 GraalVM 原生映像技术。 - **丰富的生态系统**:提供了众多开箱即用的功能模块,涵盖了数据访问、日志管理、Web 服务等多个方面[^4]。 --- ### Solon框架的主要功能 Solon 不仅具备传统的 Web 开发能力,还针对现代应用需求进行了优化: 1. **缓存框架** - 支持自定义缓存策略,能够轻松集成 Redis 或 Ehcache 等主流缓存工具[^1]。 2. **事务传播机制** - 实现了灵活的分布式事务管理方案,满足复杂业务场景下的需求[^1]。 3. **AOP 功能** - 提供 `AopContext` 接口用于动态代理操作,在某些情况下可以通过手动注册未被扫描到的组件来解决特定问题[^3]。 4. **插件扩展机制** - 用户可以利用 Plugin 扩展机制创建自己的插件并将其无缝融入现有系统中[^1]。 5. **验证框架** - 内置强大的参数校验功能,允许开发者通过简单的注解完成复杂的输入检查逻辑[^1]。 6. **渲染控制** - 可以方便地定制统一接口返回格式,使前端交互变得更加直观清晰。 7. **多协议支持** - 同时支持 HTTP、WebSocket 和 Socket 协议接入,适用于更多样化应用场景[^2]。 --- ### 如何获取文档资料? 官方文档是学习任何新技术的最佳起点之一。对于 Solon 而言,可以从以下几个渠道入手查阅相关内容: 1. 官方网站 访问 [https://solon.noear.org/](https://solon.noear.org/) 获取最新版教程和技术说明文件。 2. GitHub 仓库 地址位于 https://github.com/noear/solon ,这里不仅包含了完整的源码实现细节,还有详细的 README 文件指导初学者如何开始使用该框架。 3. 社区论坛和支持群组 加入 Solon 的 QQ 群或者邮件列表可以获得来自社区成员的帮助解答疑问;也可以关注作者博客了解更多幕后故事与发展计划。 以下是快速入门的一个简单例子: ```java import org.noear.solon.Solon; public class App { public static void main(String[] args){ Solon.start(App.class, args); } } ``` 此代码片段展示了最基本的 Hello World 示例程序结构——只需几行即可搭建起一个可用的服务端点! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值