SpringBoot

1.springBoot

1.1.Spring Validation, 对注册接口的参数进行合法性校验

1.1.1.引入Spring Validation 起步依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

1.1.2.在参数前面添加@Pattern注解

1.1.3.在Controller类上添加@Validated注解

例如:

1.1.4.全局异常处理器

//exception/;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
  @ExceptionHandler(Exception.class)
  public Result handleException(Exception e){
      e.printStackTrace();
      return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "操作失败");
  }
}

1.2.jwt令牌验证

1.2.1.引入Spring Validation 起步依赖

<dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>4.4.0</version>
    </dependency>

1.2.2.引入utils/JwtUtil工具类

package com.school.moviebooking.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtil {
    private static final String *KEY* = "xxls";
    public static String genToken(Map<String, Object> claims) {
        return JWT.*create*()
                .withClaim("claims", claims)
                .withExpiresAt(new Date(System.*currentTimeMillis*() + 1000 * 60 * 60 ))
                .sign(Algorithm.*HMAC256*(*KEY*));
    }
    //接收token,验证token,并返回业务数据
    public static Map<String, Object> parseToken(String token) {
        return JWT.*require*(Algorithm.*HMAC256*(*KEY*))
                .build()
                .verify(token)
                .getClaim("claims")
                .asMap();
    }
}

1.2.3.例如:根据id和userName生成token

Map<String, Object> claims = new HashMap<>();
claims.put("id",u.getId());
claims.put("username", u.getUserName());
String token = JwtUtil.*genToken*(claims);

1.3.knife4j接口测试

1.3.1.引入knife4j 起步依赖

 <!-- http://localhost:8080/doc.html#/home -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.5.0</version>
        </dependency>

说明:在浏览器访问进入接口测试界面

http://localhost:8080/doc.html#/home

1.4.电脑内图片通过Spring Boot被浏览器下载

Spring Boot提供了一种简单的方式来处理静态资源,如图片,并允许用户通过HTTP请求来下载这些资源。

以下是一个基本的Spring Boot应用程序示例,它允许用户下载存储在服务器上的图片文件:

首先,确保你的Spring Boot应用程序已经包含了Spring Web依赖,这通常是通过在pom.xml文件中添加以下依赖实现的:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

接下来,创建一个控制器来处理图片下载请求:

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;

@RestController
public class ImageDownloadController {

    @GetMapping("/download-image")
    public void downloadImage(HttpServletResponse response) {
        // 图片文件名,确保图片存放在项目的资源目录下(如static或resources文件夹)
        String filename = "example-image.png";
        
        // 获取资源文件
        Resource resource = new ClassPathResource("static/" + filename);
        
        // 设置HTTP响应的Content-Type和Content-Disposition
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
        
        try {
            // 将图片文件的内容输出到HTTP响应中
            response.getOutputStream().write(resource.getInputStream().readAllBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个控制器中,我们定义了一个/download-image的GET端点,当用户访问这个URL时,就会触发图片下载。我们使用ClassPathResource来获取类路径下的资源文件,并将其作为HTTP响应发送给客户端。

最后,确保你的图片文件已经放置在项目的资源目录中,例如src/main/resources/static/目录下,并且文件名与控制器中指定的文件名相匹配。

现在,当你运行Spring Boot应用程序并访问http://localhost:8080/download-image时,浏览器就会开始下载名为example-image.png的图片文件。

请注意,这个例子假设你已经配置了静态资源的映射,Spring Boot默认会将/static//public//resources//META-INF/resources/等目录下的资源作为静态资源提供服务。如果你的图片存放在其他位置,你可能需要自定义静态资源的映射。

2.springCloud

1.1.RestTemplate远程调用

1.1.1.在配置类创建RestTemplate对象

1.1.2.相关用例

 2.2.Eureka注册中心

2.2.1.搭建注册中心

2.2.1.1.引入Eureka-server依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    <version>4.1.1</version>
</dependency>
 2.2.1.2.在启动类添加@EnableEurekaServer注解
2.2.1.3.application.yml中编写配置信息

2.2.2.服务注册

2.2.2.1.引入Eureka-Client依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>4.1.1</version>
</dependency>
 2.2.2.2.application.yml中编写配置信息

2.2.3.服务发现

2.2.3.1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口

 2.2.3.2.在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

 2.3.Ribbon负载均衡

2.4.Nacos注册中心

2.4.1.Nacos安装

2.4.1.1.Windows安装

开发阶段采用单机安装即可。

2.4.1.1.1.下载安装包

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

GitHub主页:https://github.com/alibaba/nacos

GitHub的Release下载页:https://github.com/alibaba/nacos/releases

如图:

windows版本使用nacos-server-1.4.1.zip包即可。

2.4.1.1.2.解压

将这个包解压到任意非中文目录下,如图:

目录说明:

  • bin:启动脚本

  • conf:配置文件

2.4.1.1.3.端口配置

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。

如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

修改其中的内容:

启动非常简单,进入bin目录,结构如下:

然后执行命令即可:

  • windows命令:

    startup.cmd -m standalone

执行后的效果如图:

2.4.1.1.5.访问

在浏览器输入地址:http://127.0.0.1:8848/nacos即可:

默认的账号和密码都是nacos,进入后:

2.4.1.2.Linux安装

Linux或者Mac安装方式与Windows类似。

2.4.1.2.2.1.安装JDK

Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。

上传jdk安装包:

上传到某个目录,例如:/usr/local/

然后解压缩:

tar -xvf jdk-8u144-linux-x64.tar.gz

然后重命名为java

配置环境变量:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

设置环境变量:

source /etc/profile

2.4.1.2.2.2.上传安装包

如图:

上传到Linux服务器的某个目录,例如/usr/local/src目录下:

2.4.1.2.2.3.解压

命令解压缩安装包:

tar -xvf nacos-server-1.4.1.tar.gz

然后删除安装包:

rm -rf nacos-server-1.4.1.tar.gz

目录中最终样式:

目录内部:

2.4.1.2.2.4.端口配置

与windows中类似

2.4.1.2.2.5.启动

在nacos/bin目录中,输入命令启动Nacos:

sh startup.sh -m standalone

​2.5.1.使用配置

2.5.1.1.引入依赖

 父工程:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Nacos客户端:

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.5.1.2.在application.yml文件中添加配置

 2.6.http客户端Feign

2.6.1.依赖

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>4.1.1</version>
</dependency>

2.6.2.启动类添加注解开启Feign的功能

2.6.3.编写feign客户端

 2.7.统一网关Gateway

2.7.1.搭建网关

2.7.1.1.依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<!-- 网关依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
    <version>4.1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<!-- nacos服务发现依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2023.0.0.0-RC1</version>
</dependency>
 2.7.1.2.编写路由配置及nacos地址

2.8.RabbitMQ

2.8.1.安装

2.8.1.1.下载镜像
docker pull rabbitmq:3-management
2.8.1.2.运行
docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 --name mq \ --hostname mq1 \
 -p 15672:15672 \ -p 5672:5672 \
 -d \
 rabbitmq:3-management

2.9.SpringAMQP

2.9.1.依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>3.2.4</version>
</dependency>

2.9.2.application.yml中添加配置

2.9.3.发送消息用例

 2.9.4.接收消息用例

3.0.elasticsearch

4.0.生成SSL证书

keytool -genkey -alias tomcat
keytool -genkey -alias tomcat -keyalg RSA

配置文件

server:
  ssl:
    key-store: .keystore
    key-store-password: abcdef
    key-store-type: JKS
    key-alias: tomcat
  http-port: 8080
  port: 8081

配置类

package com.example.demo.config;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MvcConfiguration {
    @Value("${server.port}")
    private int sslPort;//https的端口

    @Value("${server.http-port}")
    private int httpPort;//http的端口

    @Bean
    public TomcatServletWebServerFactory servletContainerFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                //设置安全性约束
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                //设置约束条件
                SecurityCollection collection = new SecurityCollection();
                //拦截所有请求
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //设置将分配给通过此连接器接收到的请求的方案
        connector.setScheme("http");

        //true: http使用http, https使用https;
        //false: http重定向到https;
        connector.setSecure(false);

        //设置监听请求的端口号,这个端口不能其他已经在使用的端口重复,否则会报错
        connector.setPort(httpPort);

        //重定向端口号(非SSL到SSL)
        connector.setRedirectPort(sslPort);

        tomcat.addAdditionalTomcatConnectors(connector);
        return tomcat;
    }
}

5.0.定制Banner

这是默认的启动图标

我们可以在src/main/resources下新建一个banner.txt文件

通过

Text to ASCII Art Generator (TAAG) (patorjk.com)

网站生成字符,将网站生成的字符复制到banner.txt文件中,再次启动时,图案改变

期待更新~~~~

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值