跳至主要內容

Springboot编程起步

wangdx大约 7 分钟

构建 SpringBoot 项目

SpringBoot + Gradle

  • SpringBoot 为了便于项目的编写开发,往往都会基于构建工具的形式进行项目所需的依赖库管理,在本次开发中考虑到项目结构扩展性的需要,将直接基于 Gradle 构建工具进行代码管理。

1、
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


2、
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.4.3'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '3.2.3'

3、

plugins {
    id 'java'
}

group 'com.yootk'
version '1.0'

sourceCompatibility = 11 // 本次项目都是基于JDK-11版本编写的
targetCompatibility = 11 // 本次项目都是基于JDK-11版本编写的

repositories {
    // 考虑到项目代码的下载问题,建议直接添加一个阿里云所给出的国内的仓库
    maven {url 'http://maven.aliyun.com/nexus/content/groups/public'} // 引入了阿里云的Maven仓库
    mavenCentral() // 默认情况下所提供仅仅是一个Maven的中央仓库;
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.4.3'
}

第-个 SpringBoot 应用

1、

package com.yootk;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; // SpringBoot扩展的注解
import org.springframework.stereotype.Controller; // SpringMVC注解
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller // 给出的就是在SpringMVC里面所使用的注解配置
@EnableAutoConfiguration // 自动装配处理
public class FirstSpringBootApplication { // 编写的第一个SpringBoot程序
    @RequestMapping("/") // 映射目录
    @ResponseBody // 对于当前的响应是直接做转换处理
    public String home() { // 控制层处理方法
        return "沐言科技:www.yootk.com"; // 响应的数据信息
    }

    public static void main(String[] args) {
        SpringApplication.run(FirstSpringBootApplication.class, args); // 运行SpringBoot程序
    }

}

SpringBoot 注解分析

SpringBoot 注解

  • SpringBoot 是基于 SpringMVC 的开发应用,所以在 SpringBoot 程序开发中,可以大量的使用 Spring 与 SpringMVC 中所提供的应用注解

1、

package com.yootk;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 直接基于Rest架构进行处理,省略了@ResponseBody注解
@EnableAutoConfiguration // 自动装配处理
public class FirstSpringBootApplication { // 编写的第一个SpringBoot程序
    @RequestMapping("/") // 映射目录
    public String home() { // 控制层处理方法
        return "沐言科技:www.yootk.com"; // 响应的数据信息
    }

    public static void main(String[] args) {
        SpringApplication.run(FirstSpringBootApplication.class, args); // 运行SpringBoot程序
    }

}


2、
package com.yootk.action;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 直接基于Rest架构进行处理,省略了@ResponseBody注解
@RequestMapping("/message/*") // 添加父路径
public class MessageAction { // 控制层的实现类
    private static final Logger LOGGER = LoggerFactory.getLogger(MessageAction.class); // 获取日志对象
    @RequestMapping("echo") // 子路径
    public String echo(String msg) { // 进行请求参数的接收以及请求内容的回应
        LOGGER.info("接收msg的请求参数,内容为:{}", msg); // 日志输出
        return "【ECHO】" + msg; // 直接进行Rest响应
    }
}


3、
package com.yootk; // 父包,这个包中的所有子包的类会被自动扫描

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 一个注解解决所有的问题
public class StartSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(StartSpringBootApplication.class, args); // 运行SpringBoot程序
    }
}

4、localhost:8080/message/echo?msg=沐言科技:www.yootk.com

dependency-management 插件

Gradle 项目依赖

  • SpringBoot 基本依赖:
    • compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.4.1
  • 而在 Gradle 标准化开发设计中,为了便于版本的管理,往往会将所需要的版本编号利用 Groovy 脚本语法进行单独的定义,而后在使用时进行该版本编号的引入
1、
// https://mvnrepository.com/artifact/io.spring.dependency-management/io.spring.dependency-management.gradle.plugin
implementation group: 'io.spring.dependency-management', name: 'io.spring.dependency-management.gradle.plugin', version: '1.0.11.RELEASE', ext: 'pom'

2、
plugins {
    id 'org.springframework.boot' version '2.4.3' // 将版本编号配置在插件内部
    id 'io.spring.dependency-management' version '1.0.11.RELEASE' // 由此插件负责版本号的统一维护
    id 'java'
}

group 'com.yootk'
version '1.0'

sourceCompatibility = 11 // 本次项目都是基于JDK-11版本编写的
targetCompatibility = 11 // 本次项目都是基于JDK-11版本编写的

repositories {
    // 考虑到项目代码的下载问题,建议直接添加一个阿里云所给出的国内的仓库
    maven {url 'http://maven.aliyun.com/nexus/content/groups/public'} // 引入了阿里云的Maven仓库
    mavenCentral() // 默认情况下所提供仅仅是一个Maven的中央仓库;
}


dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    compileOnly group: 'org.springframework.boot', name: 'spring-boot-starter-web'
}

tasks.withType(JavaCompile).configureEach { //spring6.1废弃@requestParame
    options.compilerArgs.add("-parameters")
}

SpringBootPlugin

  • SpringBootPlugin 项目开发完成之后往往都需要对项目进行打包处理操作,为了便于将 SpringBoot 程序打包为可执行的 iar 文件或者是 WEB 部署的 war 文件,可以在项目中引入“spring-boot-gradle-plugin”插件进行管理。
1、
Windows键 + R cmd.exe
cd H:\workspace\idea\firstboot
h:
gradlew.bat bootRun


2、
buildscript { 						// 定义脚本使用资源
    repositories { 						// 脚本资源仓库
       maven { url 'https://repo.spring.io/libs-milestone' }
    }
    dependencies { 						// 依赖库
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.4.1'
    }
}


3、
buildscript { 						// 定义脚本使用资源
    repositories { 						// 脚本资源仓库
        maven { url 'https://repo.spring.io/libs-milestone' }
    }
    dependencies { 						// 依赖库
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.4.3'
    }
}
plugins {
    id 'java'
}
apply plugin: 'org.springframework.boot' // 引入之前的插件
apply plugin: 'io.spring.dependency-management' // 引入之前的插件
group 'com.yootk'
version '1.0'

sourceCompatibility = 11 // 本次项目都是基于JDK-11版本编写的
targetCompatibility = 11 // 本次项目都是基于JDK-11版本编写的

repositories {
    // 考虑到项目代码的下载问题,建议直接添加一个阿里云所给出的国内的仓库
    maven {url 'http://maven.aliyun.com/nexus/content/groups/public'} // 引入了阿里云的Maven仓库
    mavenCentral() // 默认情况下所提供仅仅是一个Maven的中央仓库;
}


dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'org.springframework.boot:spring-boot-starter-web'
}

多模块拆分

1、
project_group=com.yootk
project_version=1.0.0
project_jdk=11

2、
ext.versions = [    // 定义所有要使用的版本号
        springboot:     '2.4.1' // SpringBoot版本号
]
ext.libraries = [   // 定义所有的依赖库
        'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}"
]

3、
buildscript { 						// 定义脚本使用资源
    apply from 'dependencies.gradle' // 引入所需要的依赖库文件
    repositories { 						// 脚本资源仓库
        maven { url 'https://repo.spring.io/libs-milestone' }
    }
    dependencies { 						// 依赖库
        classpath libraries.'spring-boot-gradle-plugin'
    }
}

group project_group
version project_version
apply from 'dependencies.gradle' // 引入所需要的依赖库文件
def env = System.getProperty("env") ?: 'dev' // 获取env环境属性
subprojects {   // 子模块
    apply plugin: 'java' // 引入之前的插件
    apply plugin: 'org.springframework.boot' // 引入之前的插件
    apply plugin: 'io.spring.dependency-management' // 引入之前的插件
    sourceCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的
    targetCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的
    repositories {  // 配置Gradle仓库
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        all {
            ArtifactRepository repo ->
                if (repo instanceof MavenArtifactRepository) {
                    def url = repo.url.toString()
                    if (url.startsWith('https://repo1.maven.org/maven2')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                        remove repo
                    }
                    if (url.startsWith('https://jcenter.bintray.com/')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                        remove repo
                    }
                }
        }
        maven { url ALIYUN_REPOSITORY_URL } // 设置阿里云仓库
        maven { url ALIYUN_JCENTER_URL } // 设置阿里云仓库
    }
    dependencies {  // 公共依赖库管理
        compile(
        )
    }
    sourceSets {    // 源代码目录配置
        main { // main及相关子目录配置
            java { srcDirs = ['src/main/java'] }
            resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }
        }
        test { // test及相关子目录配置
            java { srcDirs = ['src/test/java'] }
            resources { srcDirs = ['src/test/resources'] }
        }
    }
    test {  // 配置测试任务
        useJUnitPlatform() // 使用JUnit测试平台
    }
    // 最终生成的jar文件名称:baseName-version-classifier.extension
    task sourceJar(type: Jar, dependsOn: classes) { // 源代码的打包任务
        archiveClassifier = 'sources' // 设置文件的后缀
        from sourceSets.main.allSource // 所有源代码的读取路径
    }
    task javadocTask(type: Javadoc) { // JavaDoc文档打包任务
        options.encoding = 'UTF-8' // 设置文件编码
        source = sourceSets.main.allJava // 定义所有的Java源代码
    }
    task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包
        archiveClassifier = 'javadoc' // 文件标记类型
        from javadocTask.destinationDir // 通过JavadocTask任务中找到目标路径
    }
    tasks.withType(Javadoc) {   // 文档编码配置
        options.encoding = 'UTF-8' // 定义编码
    }
    tasks.withType(JavaCompile) {   // 编译编码配置
        options.encoding = 'UTF-8' // 定义编码
    }
    artifacts { // 最终的打包的操作任务
        archives sourceJar // 源代码打包
        archives javadocJar // javadoc打包
    }
    gradle.taskGraph.whenReady {    // 在所有的操作准备好后触发
        tasks.each { task ->    // 找出所有的任务
            if (task.name.contains('test')) {   // 如果现在发现有test任务
                // 如果将enabled设置为true表示要执行测试任务,如果设置为false表示不执行测试任务
                task.enabled = true
            }
        }
    }
    [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 编码配置
}



4、
project('microboot-web') { // 子模块
    dependencies { // 配置子模块依赖
        compile(project(':microboot-common')) // 引入其他子模块
    }
}
project('microboot-common') { // 子模块
    dependencies {} // 配置子模块依赖
}


demo


上次编辑于: