Revise o sistema de gerenciamento de tarefas do aluno

Deixe o plano de fundo responder ao front end imediatamente, o front end não espera pelo processo de processamento

Descrição: há uma função de lembrete por e-mail no sistema de gerenciamento de tarefas de casa do aluno. Se não for processado, o front end irá aguardar o resultado da devolução e não exibirá um prompt de envio com sucesso até que o e-mail seja enviado.
1. Use tentar {} finalmente {} (será mais rápido)

try{
    
    
	return ApiResult.success("发送成功");
}finally{
    
    
	//发送邮件代码...
}

Use a instrução try {} finally {} para permitir que a instrução try retorne diretamente o resultado primeiro e, finalmente, execute o código de correspondência.

2. Use vários tópicos (retorne os resultados em segundos)

new thread(()->{
    
    
	//发送邮件代码...
}).start();
return ApiResult.success("发送成功");

O código de envio de email originalmente executado pelo thread principal é entregue a outros threads para processamento, e o thread principal retorna o resultado diretamente.

Envie uma solicitação Ajax assim que a página for carregada

Insira a descrição da imagem aqui

$(document).ready(function () {
    
     //此处页面打开即请求api
        $.ajax({
    
    
            type: 'GET',
            url: '/ssm/homework/getHomeWork',
            dataType: "json",
            async: false,
            success: function (data) {
    
    
             
                }
            }
        });
    });

Eu costumava atualizar algumas vezes antes de exibir os dados. Acontece que estava adicionando async: false para alterar a solicitação assíncrona em uma solicitação síncrona. Eu costumava pensar que adicionar $ (document) .ready () pode ser carregado. Parâmetros Ajax detalhados

SpringBoot hot deployment

Adicione spring-boot-devtools em pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
</dependency>

Se você alterar o código, será necessário pressionar Ctrl + Shift + F9 para concluir a implantação ativa. Anteriormente, apenas saiba que devtools podem ser usados ​​para implantação ativa. SpringBoot implementa implantação quente em IDEA

413 (Solicitar Entidade Muito Grande)

Ao fazer upload do arquivo, ele relatou 413 para
modificar o arquivo de configuração Nginx

server {
    
      
    ...  
    client_max_body_size 20m;  
    ...  
}

Você também pode modificar o arquivo de configuração do tomcat (modificado em application.properties)

server.tomcat.max-http-form-post-size=-1

Defina a capacidade máxima de solicitações de postagem como ilimitada

Otimize SQL

Criar índice

Otimize a declaração de limite

selecione * de operation_log 1 limit 3000000, 10;

select * from operation_log t, (selecionar id da ordem do operation_log pelo limite de id
3000000,10) b onde t.id = b.id;

Método de download de arquivo

1. Usando o tipo ResponseEntity fornecido por springmvc, você pode usá-lo para definir facilmente os HttpHeaders e HttpStatus retornados. (Único arquivo)

@RequestMapping("/download")  
	    public ResponseEntity<byte[]> export(String fileName,String filePath) throws IOException {
    
      
	    	
	        HttpHeaders headers = new HttpHeaders();    
	        File file = new File(filePath);
	        
	        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
	        headers.setContentDispositionFormData("attachment", fileName);    
	       
	        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
	                                              headers, HttpStatus.CREATED);    
	    } 

2. Baixe e empacote vários arquivos em um pacote zip

//批量文件压缩后下载
	@RequestMapping("/downLoad2")
	public ResponseEntity<byte[]> download2(HttpServletRequest request) throws IOException {
    
    
		
		//需要压缩的文件
		List<String> list = new ArrayList<String>();
		list.add("test.txt");
		list.add("test2.txt");
		
		//压缩后的文件
		String resourcesName = "test.zip";
		
		ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("D:/"+resourcesName));
		InputStream input = null;
		
		for (String str : list) {
    
    
			String name = "D:/"+str;
			input = new FileInputStream(new File(name));  
            zipOut.putNextEntry(new ZipEntry(str));  
            int temp = 0;  
            while((temp = input.read()) != -1){
    
      
                zipOut.write(temp);  
            }  
            input.close();
		}
		zipOut.close();
		File file = new File("D:/"+resourcesName);
		HttpHeaders headers = new HttpHeaders();
		String filename = new String(resourcesName.getBytes("utf-8"),"iso-8859-1");
		headers.setContentDispositionFormData("attachment", filename);
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
	}

Código de front-end:
1. Use a solicitação Ajax

<button type="button" onclick="download()">导出</button>
function download() {
    
    
  var url = 'download/?filename=aaa.txt';
  var xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);    // 也可以使用POST方式,根据接口
  xhr.responseType = "blob";  // 返回类型blob
  // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
  xhr.onload = function () {
    
    
    // 请求完成
    if (this.status === 200) {
    
    
      // 返回200
      var blob = this.response;
      var reader = new FileReader();
      reader.readAsDataURL(blob);  // 转换为base64,可以直接放入a表情href
      reader.onload = function (e) {
    
    
        // 转换完成,创建一个a标签用于下载
        var a = document.createElement('a');
        a.download = 'data.xlsx';
        a.href = e.target.result;
        $("body").append(a);  // 修复firefox中无法触发click
        a.click();
        $(a).remove();
      }
    }
  };
  // 发送ajax请求
  xhr.send()
}

2. Envie usando formulários ocultos (recomendado)

var form = $("<form>");
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",rootPath + "T_academic_essay/DownloadZipFile.do");
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","strZipPath");
input1.attr("value",strZipPath);
$("body").append(form);
form.append(input1);
form.submit();
form.remove();

Acho que você gosta

Origin blog.csdn.net/weixin_41699562/article/details/105002897
Recomendado
Clasificación