Revisar el sistema de gestión de asignaciones de estudiantes

Deje que el fondo responda al front-end inmediatamente, el front-end no espera el proceso de procesamiento

Descripción: Hay una función de recordatorio de correo electrónico en el sistema de gestión de tareas de los estudiantes. Si no se procesa, la interfaz esperará el resultado de la devolución y no mostrará un mensaje emergente de envío exitoso hasta que se haya enviado el correo electrónico.
1. Utilice probar {} finalmente {} (será más rápido)

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

Utilice la instrucción try {} finalmente {} para permitir que la instrucción try devuelva directamente el resultado primero, y luego ejecute el código de envío al final.

2. Utilice varios hilos (devuelva los resultados en segundos)

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

El código de envío de correo originalmente ejecutado por el hilo principal se entrega a otros hilos para su procesamiento, y el hilo principal devuelve directamente el resultado.

Envíe una solicitud Ajax tan pronto como se cargue la página

Inserte la descripción de la imagen aquí

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

Solía ​​actualizar algunas veces antes de mostrar los datos. Resultó estar agregando async: false para cambiar la solicitud asincrónica en una solicitud síncrona. Solía ​​pensar que se puede cargar $ (document) .ready (). Parámetros detallados de Ajax

Implementación en caliente de SpringBoot

Agregue spring-boot-devtools en pom.xml

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

Si cambia el código, debe presionar Ctrl + Shift + F9 para completar la implementación en caliente. Anteriormente, solo sepa que devtools se puede utilizar para la implementación en caliente. SpringBoot implementa la implementación en caliente en IDEA

Solicitud de entidad 413 muy extensa)

Al cargar el archivo, informó 413 para
modificar el archivo de configuración de Nginx

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

También puede modificar el archivo de configuración de tomcat (modificado en application.properties)

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

Establecer la capacidad máxima de solicitudes de publicación como ilimitada

Optimizar SQL

Crear índice

Optimizar declaración de límite

seleccione * de operation_log 1 límite 3000000, 10;

seleccionar * de operation_log t, (seleccionar id de operation_log order by id limit
3000000,10) b donde t.id = b.id;

Método de descarga de archivos

1. Usando el tipo ResponseEntity proporcionado por springmvc, puede usarlo para definir fácilmente los HttpHeaders y HttpStatus devueltos. (Fila india)

@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. Descargue y empaque varios archivos en un paquete 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 interfaz:
1. Utilice la solicitud 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. Envíe utilizando formularios 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();

Supongo que te gusta

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