唤醒手腕 Java 后端 Springboot 框架、包管理工具 Maven 学习笔记

包管理工具 Maven 官网

官方网站:https://maven.apache.org/

Maven, a Yiddish word meaning accumulator of knowledge, began as an attempt to simplify the build processes in the Jakarta Turbine project. There were several projects, each with their own Ant build files, that were all slightly different. JARs were checked into CVS. We wanted a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information, and a way to share JARs across several projects.

The result is a tool that can now be used for building and managing any Java-based project. We hope that we have created something that will make the day-to-day work of Java developers easier and generally help with the comprehension of any Java-based project.

官方网站下载 Maven

在这里插入图片描述

Maven 是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。Maven 包含了一个项目对象模型Project Object Model,一组标准集合,一个项目生命周期Project Lifecycle,一个依赖管理系统Dependency Management System,和用来运行定义在生命周期阶段phase中插件plugin目标goal的逻辑。当你使用 Maven 的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

Maven commands 常用命令

命令 解释
mvn compile 编译源代码
mvn deploy 发布项目
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成 jar
mvn install 在本地 Repository 中安装 jar
mvn archetype:generate 创建 Maven 项目

安装 JDK Java 环境

Thank you for downloading this release of the Java™ Platform, Standard Edition Development Kit (JDK™). The JDK is a development environment for building applications and components using the Java programming language.

The JDK includes tools for developing and testing programs written in the Java programming language and running on the Java platform.

安装地址:https://www.oracle.com/java/technologies/downloads/#jdk19-windows

选择 Window 版本进行下载
在这里插入图片描述
Compressed Archive 和 Installer 版本区别?

Windows x64 Compressed Archive:压缩版本,需要自行配置(推荐)

Windows x64 Installer:可执行 exe 安装版本,安装过程程序自行配置 JDK 环境变量

配置环境变量:JAVA_HOME

在这里插入图片描述
编辑系统变量 Path,添加变量值

%JAVA_HOME%\bin

CMD 端测试 Java 是否安装成功?

C:\Users\HP>java --version
java 19.0.2 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

配置 Maven 环境变量

配置环境变量:MAVEN_HOME

在这里插入图片描述

编辑系统变量 Path,添加变量值

%MAVEN_HOME%\bin

判断 Maven 是否安装成功?

C:\Users\HP>mvn -version
Apache Maven 3.9.0 (9b58d2bad23a66be161c4664ef21ce219c2c8584)
Maven home: E:\Environment\apache-maven-3.9.0
Java version: 19.0.2, vendor: Oracle Corporation, runtime: E:\Environment\jdk-19.0.2
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
C:\Users\HP>mvn
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.

Maven 配置文件

maven依赖下载存放的路径,默认依赖包存放在C盘。

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${
    
    user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

在这里插入图片描述

“C:\Users\Administrator.m2\repository” 目录下,可以查看 maven 的 setting.xml 配置,查看默认路径的配置,我们将默认的修改为我们自己指定的别的盘符的目录。

在这里插入图片描述
自定义设置 Maven 存放路径

<localRepository>E:\Environment\customized-maven-repository</localRepository>

Maven 镜像源

<mirrors>
	<!-- mirror
	 | Specifies a repository mirror site to use instead of a given repository. The repository that
	 | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
	 | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
	 |
	<mirror>
		<id>mirrorId</id>
		<mirrorOf>repositoryId</mirrorOf>
		<name>Human Readable Name for this Mirror.</name>
		<url>http://my.repository.com/repo/path</url>
	</mirror>
	 -->
	<mirror>
		<id>maven-default-http-blocker</id>
		<mirrorOf>external:http:*</mirrorOf>
		<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
		<url>http://0.0.0.0/</url>
		<blocked>true</blocked>
	</mirror>
</mirrors>

配置阿里的镜像仓库的路径。默认依赖包的下载是要去访问 maven 的中央仓库,因为 maven 中央仓库在国外,所以下载会很慢,选择国内的站点阿里镜像下载会很快。

<mirrors>
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

Springboot 初始化

初始化 Spring Initializr 服务器 URL

在这里插入图片描述

阿里云初始化 start.aliyun.com:Java 8 或 Java 11
Spring 官方初始化 start.spring.io:Java 8、Java 11、Java 17、Java 19

Spring Web

选择 SpringBoot 初始化依赖 Dependencies

Build web, including RESTful, applications usingSpring MVC.Uses Apache Tomcat as the defaultembedded container.

在 IEDA 配置 Maven

配置 Maven 主路径、用户设置文件、本地仓库

在这里插入图片描述

在这里插入图片描述

IEDA 根据 pom.xml 进行下载 Maven 包

然后进行导入 Maven 工程 lmporting Maven projects

Waiting for Maven import completion 等待 Maven 导入完成

在这里插入图片描述
Maven 下载相关插件 Downloading Maven Plugins

启动 Springboot 服务器

Windows Defender 防火墙已经阻止此应用的部分功能

在这里插入图片描述

2023-02-20T00:00:32.898+08:00  INFO 6816 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2023-02-20T00:00:32.926+08:00  INFO 6816 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-02-20T00:00:32.936+08:00  INFO 6816 --- [  restartedMain] c.mslmsxp.mathscat.MathscatApplication   : Started MathscatApplication in 2.384 seconds (process running for 3.736)

LiveReload server is running on port 35729

Tomcat started on port(s): 8080 (http) with context path ‘’

package com.mslmsxp.mathscat.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Controller
public class IndexController {
    
    
    @RequestMapping("/index")
    public String IndexShow() {
    
    
        return "Hello World";
    }
}

浏览器运行结果:

在这里插入图片描述

application.properties

#应用启动端口
server.port=8080
#应用名称
spring.application.name=mineproject

GET 请求接收 Param

package com.mslmsxp.mathscat.controller;

import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Controller
public class IndexController {
    
    
    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String IndexShow(@RequestParam String username) {
    
    
        System.out.println(username);
        return "Hello World";
    }
}

@RequestParam

@RequestParam 常用来处理简单类型的绑定,其原理是通过 Request.getParameter() 获取参数值。因为使用 request.getParameter() 方式获取参数,所以可以处理 get 方式中参数的值,也可以处理 post 方式中 表单中参数的值。

提交方式 GET、POST,注解有两个属性: value、required

value 用来指定要传入值的 id 名称:即请求参数的 key 对应,也是表单属性的 name 的值对应,required用来指示参数是否必须绑定,默认为true,即请求参数必须携带该参数,不携带将报错。

@RequestBody

@RequestBody 适用于以 POST 为请求方式,请求参数以 Json 格式放在请求体中的前端请求,所以在使用 @RequestBody 接收数据时,一般都用 POST 方式进行提交,并将参数放以 Json 的格式放在请求体中。

处理的数据的请求头 Content-Type:application/jsonapplication/xml等等,不能是 application/x-www-form-urlencoded 编码的内容。

其参数解析主要是 SpringMVC 通过使用 HandlerAdapter 配置的 HttpMessageConverters 来解析 HttpEntity 中的数据,然后绑定到相应的 bean 上。

当然在后端接口中,@RequestBody@RequestParam() 可以同时使用,但得注意 @RequestBody 只能有一个,而 @RequestParam() 个数不限制。

SpringBoot + MongoDB

下载 mongodb 依赖

在这里插入图片描述
配置 Mongodb 连接 application.properties

spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
spring.data.mongodb.database=minicat
spring.data.mongodb.username=root
spring.data.mongodb.password=123456

创建实体类 例如:Student

package com.mslmsxp.mathscat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.annotation.Id;

@Data
@AllArgsConstructor
public class Student {
    
    
    @Id
    private String id;
    private String name;
}

MongoTemplate 使用

package com.mslmsxp.mathscat.controller;

import com.mslmsxp.mathscat.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Controller
public class IndexController {
    
    
    @Autowired(required = false)
    private MongoTemplate mongo;

    @RequestMapping("/mongo/add")
    public String IndexShow() {
    
    
        Student student = new Student(null, "唤醒手腕");
        String res = mongo.insert(student).toString();
        return res;
    }
}

mongo.insert 返回值是插入的对象

在这里插入图片描述

添加成功
在这里插入图片描述

IDEA Spring 工程里,经常会遇到 Could not autowire. No beans of ‘xxx’ type found 的错误提示。但程序的编译和运行都是没有问题的,有时候也有可能会报错,无法运行程序,这个错误提示并不会产生影响。但红色的错误提示看起来很不舒服。

@Autowired:表示自动注入,自动从 Spring 的上下文找到合适的 bean 来注入。

Mongodb 查询

@Autowired(required = false)
private MongoTemplate mongo;

@RequestMapping("/mongo/show")
public List<Student> StudentShow() {
    
    
    List<Student> students = mongo.findAll(Student.class);
    return students;
}

在这里插入图片描述
常用 查询 函数

查询Student文档的全部数据
mongoTemplate.findAll(Student.class)

查询 Student 文档 idid 的数据
mongoTemplate.findById(<id>, Student.class)

根据 query 内的查询条件查询
mongoTemplate.find(query, Student.class);

根据 query 内的查询条件修改
mongoTemplate.upsert(query, update, Student.class)

根据 query 内的查询条件删除
mongoTemplate.remove(query, Student.class)

新增 document
mongoTemplate.insert(student)

where 条件查询

public ApiResponse findStudentListByConditions(Student student) {
    
    
    Query query = new Query(Criteria.where("name").is(student.getName()));
    List<Student> students = mongoTemplate.find(query, Student.class);
    return Api.ok(students);
}

模糊查询 【^】开始 以【$】结束 【.*】相当于Mysql中的【%】

public ApiResponse findStudentsLikeName(String name) {
    
    
	String regex = String.format("%s%s%s", "^.*", name, ".*$");
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Query query = new Query(Criteria.where("name").regex(pattern));
    List<Student> students = mongoTemplate.find(query, Student.class);
    return Api.ok(students);
}

分页查询

public PageApiResponse findStudentsPage(StudentRequest request) {
    
    
	try {
    
    
	    Query query = new Query();
	    if (StringUtils.isNotEmpty(request.getUsername())) {
    
    
	        String regex = String.format("%s%s%s", "^.*", request.getUsername(), ".*$");
	        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
	        query.addCriteria(Criteria.where("username").regex(pattern));
	    }
	    int totalCount = (int) mongoTemplate.count(query, Student.class);
	    List<Student> studentList = mongoTemplate.find(query.skip(request.getOffset()).limit(request.getPageSize()), Student.class);
	    PageApiResponse response = PageApi.ok(studentList, totalCount, "获取列表成功");
	    response.setTotalPage(PageCounter.toTalPage(totalCount, request.getPageSize()));
	    response.handleRequest(request);
	    return response;
	} catch (Exception e) {
    
    
	    throw new SystemException(-1, "获取分页数据出错");
	}
}

MongoDB 远程连接

没有配置验证权限数据库,结果尝试发现增加 authSource 字段即可

spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/业务数据库?authSource=权限校验数据库

Springboot SSL 证书

application.properties 配置文件

server.ssl.key-store=classpath:xxx.com.pfx
server.ssl.key-store-password=xxxxxx
server.ssl.key-store-type=PKCS12(根据证书)

腾讯云下载 Tomcat 证书(Springboot 是内嵌 Tomcat)
在这里插入图片描述

Linux yum 安装 JDK

在 /etc/profile 配置了自己的 Java 环境后 java -version 发现并不是我们配置的 Java 环境

先查看自带 Java rpm -qa | grep jdk

[root@VM-4-16-centos ~]# rpm -qa | grep jdk
java-1.8.0-openjdk-devel-1.8.0.312.b07-2.el8_5.x86_64
java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
copy-jdk-configs-4.0-2.el8.noarch
java-1.8.0-openjdk-headless-1.8.0.312.b07-2.el8_5.x86_64

如何进行删除?

[root@VM-4-16-centos ~]# rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.312.b07-2.el8_5.x86_64

再次查看是否删除,rpm -qa | grep jdk 后无结果则删除成功

source /etc/profile

最后再 java -version 可以发现就我们配置的 Java 环境了。

yum 安装 Java 环境?

首先执行以下命令查看可安装的jdk版本:

yum -y list java*

选择自己需要的 JDK 版本进行安装,比如这里安装 1.8,执行以下命令:

yum install -y java-1.8.0-openjdk-devel.x86_64

安装完成之后,查看安装的 JDK 版本,输入以下指令:

java -version

便可以看到自己安装的 JDK 版本信息。你如果好奇这个自动安装把 JDK 安装到哪里去了,其实你可以在 usr/lib/jvm 下找到它们。

Linux Oracle 安装 JDK

Oracle 甲骨文 JDK 下载地址:https://www.oracle.com/cn/java/technologies/downloads/
在这里插入图片描述
上传到服务器你的目录下:

请添加图片描述
然后进行解压后,进入 /bin 目录下:

[root@VM-4-16-centos bin]# ./java -version
java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

如果想要在任何目录下都能使用,则配置环境变量

[root@localhost java]# vi /etc/profile

配置 JAVA_HOME 和 追加 PATH

JAVA_HOME=/home/javaenv/jdk_19.0.2
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH

首先按字母 I 键进入编辑,按 ESC 退出编辑,输入 :wq 保存退出

刷新环境配置使其生效

source /etc/profile

测试当前 java 环境

[root@VM-4-17-centos ~]# java -version
java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

猜你喜欢

转载自blog.csdn.net/qq_47452807/article/details/129115822