当前位置: 首页 > news >正文

springboot 与异步任务,定时任务,邮件任务

异步任务

在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。

SpringBoot 实现比较简单
主启动类:添加 注释:@EnableAsync

@EnableScheduling
@EnableAsync
@MapperScan("com.hrp.**.dao")
@SpringBootApplication
public class EcsApplication {public static void main(String[] args) {SpringApplication.run(EcsApplication.class, args);}}

业务方法添加 @Async

 @Async@Overridepublic void TestAsync() {try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("-------------");}

controller调用

@RequestMapping("myFreeMark")public String myFreeMark(Map<String,Object> map){map.put("name","zhangsan");map.put("mydate",new Date());asyncServer.TestAsync();System.out.println("==================FreemarkerController=======myFreeMark=====");return "myFreeMark";}

在这里插入图片描述
访问看到控制台打印顺序可以知道TestAsync方法异步调用

定时任务

项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前
一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口。

主启动类:增加@EnableScheduling

@EnableScheduling
@EnableAsync
@MapperScan("com.hrp.**.dao")
@SpringBootApplication
public class EcsApplication {public static void main(String[] args) {SpringApplication.run(EcsApplication.class, args);}}

任务类:类增加@Service或者@Compont注释方法增加@Scheduled注解

@Service
public class BackUpMysqlTask {/*** Seconds : 可出现", - * /"四个字符,有效范围为0-59的整数* Minutes : 可出现", - * /"四个字符,有效范围为0-59的整数* Hours : 可出现", - * /"四个字符,有效范围为0-23的整数* DayofMonth : 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数* Month : 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc* DayofWeek : 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推* Year : 可出现", - * /"四个字符,有效范围为1970-2099年*/@Scheduled(cron = "0 * * * * MON-FRI")public void backUpMysql() {System.out.println("===============");}
}

我们可以观察到控制台不断的再打印
这里要讲解cron

在这里插入图片描述
在这里插入图片描述

 /*** Seconds : 可出现", - * /"四个字符,有效范围为0-59的整数* Minutes : 可出现", - * /"四个字符,有效范围为0-59的整数* Hours : 可出现", - * /"四个字符,有效范围为0-23的整数* DayofMonth : 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数* Month : 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc* DayofWeek : 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推* Year : 可出现", - * /"四个字符,有效范围为1970-2099年*/

下面简单举几个例子:

“0 0 12 * * ?” 每天中午十二点触发
“0 15 10 ? * *” 每天早上10:15触发
“0 15 10 * * ?” 每天早上10:15触发
“0 15 10 * * ? *” 每天早上10:15触发
“0 15 10 * * ? 2005” 2005年的每天早上10:15触发
“0 * 14 * * ?” 每天从下午2点开始到2点59分每分钟一次触发
“0 0/5 14 * * ?” 每天从下午2点开始到2:55分结束每5分钟一次触发
“0 0/5 14,18 * * ?” 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
“0 0-5 14 * * ?” 每天14:00至14:05每分钟一次触发
“0 10,44 14 ? 3 WED” 三月的每周三的14:10和14:44触发
“0 15 10 ? * MON-FRI” 每个周一、周二、周三、周四、周五的10:15触发

邮件任务

准备工作

做过邮件的都大家都知道
在这里插入图片描述
所以我们要是使用qq邮箱发送必须有登录qq邮箱的权限
在这里插入图片描述
开启smtp服务,发送短信我们就可以获取一个授权码,自己拷贝下来下图的授权码记录下来
在这里插入图片描述
在这里插入图片描述

开始

添加依赖

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

配置

  mail:host: smtp.qq.com  其他邮箱需要修改username: 邮箱账户password: 授权码properties:mail:smtp:ssl:enable: true

测试代码

 @Autowiredprivate JavaMailSender javaMailSender;@Testvoid contextLoads() {SimpleMailMessage simpleMailMessage = new SimpleMailMessage();simpleMailMessage.setText("ddd");simpleMailMessage.setSubject("主题");simpleMailMessage.setTo("");simpleMailMessage.setFrom("");javaMailSender.send(simpleMailMessage);}

我们可以查收到邮件

上面是普通的邮件

发送html内容

 @Testpublic void testSend() throws MessagingException {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);messageHelper.setSubject("标题");messageHelper.setTo("@dhcc.com.cn");messageHelper.setFrom("@qq.com");messageHelper.setText("<h1>标题</h1><br/><p>这是内容</p>", true);javaMailSender.send(messageHelper.getMimeMessage());}

这里需要注意的是,setText的时候需要传一个布尔值进去,表名需要使用HTML样式。

最后代码附件

package com.hrp.msage.service;import javax.mail.MessagingException;/*** ecs** @Title: com.hrp.msage.service* @Date: 2020/7/29 13:48* @Author: wfg* @Description:* @Version:*/
public interface MailService {/*** 简单文本邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet 邮件内容*/public void sendSimpleMail(String to, String subject, String contnet);/*** HTML 文本邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @throws MessagingException*/public void sendHtmlMail(String to, String subject, String contnet) throws MessagingException;/*** 附件邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @param filePath 附件路径* @throws MessagingException*/public void sendAttachmentsMail(String to, String subject, String contnet,String filePath) throws MessagingException;/*** 图片邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @param rscPath 图片路径* @param rscId 图片ID* @throws MessagingException*/public void sendInlinkResourceMail(String to, String subject, String contnet,String rscPath, String rscId);
}
package com.hrp.msage.serviceImpl;import com.hrp.msage.service.MailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;/*** ecs** @Title: com.hrp.msage.serviceImpl* @Date: 2020/7/29 13:48* @Author: wfg* @Description:* @Version:*/
@Service("mailService")
public class MailServiceImpl implements MailService {private final Logger logger = LoggerFactory.getLogger(this.getClass());@Value("${spring.mail.username}")private String from;@Autowiredprivate JavaMailSender mailSender;/*** 简单文本邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet 邮件内容*/@Overridepublic void sendSimpleMail(String to, String subject, String contnet){SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setSubject(subject);message.setText(contnet);message.setFrom(from);mailSender.send(message);}/*** HTML 文本邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @throws MessagingException*/@Overridepublic void sendHtmlMail(String to, String subject, String contnet) throws MessagingException {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setTo(to);helper.setSubject(subject);helper.setText(contnet, true);helper.setFrom(from);mailSender.send(message);}/*** 附件邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @param filePath 附件路径* @throws MessagingException*/@Overridepublic void sendAttachmentsMail(String to, String subject, String contnet,String filePath) throws MessagingException {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setTo(to);helper.setSubject(subject);helper.setText(contnet, true);helper.setFrom(from);FileSystemResource file = new FileSystemResource(new File(filePath));String fileName = file.getFilename();helper.addAttachment(fileName, file);mailSender.send(message);}/*** 图片邮件* @param to 接收者邮件* @param subject 邮件主题* @param contnet HTML内容* @param rscPath 图片路径* @param rscId 图片ID* @throws MessagingException*/@Overridepublic void sendInlinkResourceMail(String to, String subject, String contnet,String rscPath, String rscId) {logger.info("发送静态邮件开始: {},{},{},{},{}", to, subject, contnet, rscPath, rscId);MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = null;try {helper = new MimeMessageHelper(message, true);helper.setTo(to);helper.setSubject(subject);helper.setText(contnet, true);helper.setFrom(from);FileSystemResource res = new FileSystemResource(new File(rscPath));helper.addInline(rscId, res);mailSender.send(message);logger.info("发送静态邮件成功!");} catch (MessagingException e) {logger.info("发送静态邮件失败: ", e);}}}
package com.hrp;import com.hrp.msage.service.MailService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import javax.mail.MessagingException;/*** ecs** @Title: com.hrp* @Date: 2020/7/29 13:57* @Author: wfg* @Description:* @Version:*/
@SpringBootTest
public class MailServiceTest {@Autowiredprivate MailService mailService;//    @Resource
//    private TemplateEngine templateEngine;@Testpublic void sendSimpleMail() {mailService.sendSimpleMail("wufagang@dhcc.com.cn","测试spring boot imail-主题","测试spring boot imail - 内容");}@Testpublic void sendHtmlMail() throws MessagingException {String content = "<html>\n" +"<body>\n" +"<h3>hello world</h3>\n" +"<h1>html</h1>\n" +"<body>\n" +"</html>\n";mailService.sendHtmlMail("wufagang@dhcc.com.cn","这是一封HTML邮件",content);}@Testpublic void sendAttachmentsMail() throws MessagingException {String filePath = "D:\\projects\\20200727\\ecs\\src\\main\\resources\\system.properties";String content = "<html>\n" +"<body>\n" +"<h3>hello world</h3>\n" +"<h1>html</h1>\n" +"<h1>附件传输</h1>\n" +"<body>\n" +"</html>\n";mailService.sendAttachmentsMail("wufagang@dhcc.com.cn","这是一封HTML邮件",content, filePath);}@Testpublic void sendInlinkResourceMail() throws MessagingException {//TODO 改为本地图片目录String imgPath = "D:\\projects\\20200727\\ecs\\src\\main\\resources\\imag\\IMG_20200625_104833.jpg";String rscId = "admxj001";String content = "<html>" +"<body>" +"<h3>hello world</h3>" +"<h1>html</h1>" +"<h1>图片邮件</h1>" +"<img src='cid:"+rscId+"'></img>" +"<body>" +"</html>";mailService.sendInlinkResourceMail("wufagang@dhcc.com.cn","这是一封图片邮件",content, imgPath, rscId);}@Testpublic void testTemplateMailTest() throws MessagingException {
//        Context context = new Context();
//        context.setVariable("id","ispringboot");
//
//        String emailContent = templateEngine.process("emailTeplate", context);
//        mailService.sendHtmlMail("ispringboot@163.com","这是一封HTML模板邮件",emailContent);}
}

相关文章:

springboot 与异步任务,定时任务,邮件任务

异步任务 在Java应用中&#xff0c;绝大多数情况下都是通过同步的方式来实现交互处理的&#xff1b;但是在处理与第三方系统交互的时候&#xff0c;容易造成响应迟缓的情况&#xff0c;之前大部分都是使用多线程来完成此类任务&#xff0c;其实&#xff0c;在Spring 3.x之后&a…...

2022年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:小白鼠再排队2 N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可…...

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…...

python内网环境安装第三方包

文章目录 一、问题二、解决方法三、代码实现 一、问题 内网安装第三方包的应用场景&#xff0c;一般是一些需要在没网的环境下进行开发的情况。这些环境一般仅支持本地局域网访问&#xff0c;所以只能在不下载任何第三方包的情况下艰难开发。 二、解决方法 将当前应用依赖的第…...

javaScipt

javaScipt 一、JavaScript简介二、javaScript基础1、输入输出语法2、变量3、常量4、数据类型4.1、数字型 number4.2、字符串类型 string4.3、布尔类型 boolean4.4、未定义类型 undefined4.5、null 空类型4.6、typeof 检测变量数据类型 5、数据类型转换5.1、隐式转换5.2、显示转…...

Linux(实操篇三)

Linux实操篇 Linux(实操篇三)1. 常用基本命令1.7 搜索查找类1.7.1 find查找文件或目录1.7.2 locate快速定位文件路径1.7.3 grep过滤查找及"|"管道符 1.8 压缩和解压类1.8.1 gzip/gunzip压缩1.8.2 zip/unzip压缩1.8.3 tar打包 1.9 磁盘查看和分区类1.9.1 du查看文件和…...

数学之美 — 1

为什么你会想和他人共享那些美丽的事物呢&#xff1f;因为这会让他&#xff08;她&#xff09;感到愉悦&#xff0c;也能让你在分享的过程中重新欣赏一次事物的美。 ——David Blackwell 1、感官之美&#xff0c;对于那些有规律的事物&#xff0c;你可以利用自己的视觉、触觉、…...

python中的global关键字

在Python中&#xff0c;global关键字用于在函数内部声明一个全局变量。默认情况下&#xff0c;函数内部的变量是局部变量&#xff0c;只能在函数内部访问。使用global关键字可以在函数内部创建或修改全局变量&#xff0c;使其在函数外部也可见和修改。 以下是使用global关键字…...

Matlab图像处理-幂次变换

幂次变换 如下图所示的幂次变换函数曲线图&#xff1a; 当γ <1时&#xff0c;效果和对数变换相似&#xff0c;放大暗处细节&#xff0c;压缩亮处细节&#xff0c;随着数值减少&#xff0c;效果越强。 当γ >1时&#xff0c;放大亮处细节&#xff0c;压缩暗处细节&…...

浏览器输入 URL 地址,访问主页的过程

分析&回答 浏览器解析域名&#xff1b;TCP建立连接&#xff1b;浏览器向服务器发送HTTP请求&#xff1b;服务器解析请求并返回HTTP报文&#xff1b;浏览器解析并渲染页面&#xff1b;断开连接。 反思&扩展 域名解析的流程 查找浏览器缓存——我们日常浏览网站时&am…...

每日一学————基本配置和管理

一、交换机的基本配置 配置enable口令、密码和主机名 Switch> (用户执行模式提示符) Switch>enable (进入特权模式) Switch# …...

解决 filezilla 连接服务器失败问题

问题描述&#xff1a; 开始一直用的 XFTP 后来&#xff0c;它变成收费软件了&#xff0c;所以使用filezilla 代替 XFTP 之前用的还好好的&#xff0c;今天突然就报错了&#xff1a;按要求输入相关字段&#xff0c;连接 连接失败&#xff01;&#xff01;&#xff01;o(╥﹏╥…...

如何使用Java进行机器学习?

在Java中进行机器学习&#xff0c;可以使用各种开源机器学习库和框架来实现。以下是一些常用的Java机器学习库&#xff1a; Weka&#xff1a;Weka 是一个非常流行的机器学习库&#xff0c;提供了大量的算法和工具&#xff0c;以及用于数据预处理、特征选择和可视化的功能。 De…...

springsecurity+oauth 分布式认证授权笔记总结12

一 springsecurity实现权限认证的笔记 1.1 springsecurity的作用 springsecurity两大核心功能是认证和授权&#xff0c;通过usernamepasswordAuthenticationFilter进行认证&#xff1b;通过filtersecurityintercepter进行授权。springsecurity其实多个filter过滤链进行过滤。…...

如何在职业生涯中取得成功

工作中让你有强烈情绪波动的事情 在我的工作经历中&#xff0c;有一次让我经历了强烈情绪波动的事件。我曾在一个高压的项目团队中工作&#xff0c;我们需要在极短的时间内完成一个复杂的客户项目。这个项目的截止日期非常紧迫&#xff0c;而项目的规模和要求也一直在不断增加…...

Hive-安装与配置(1)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…...

链表模拟栈

定义节点 class Node {var num: Int _var next: Node _def this(num: Int) {thisthis.num num}override def toString: String s"num[${this.num}]" }定义方法 class LinkStack {private var head new Node(0)def getHead: Node head//判断是否为空def isEmp…...

MySQL基础篇:数据库概述和部署

SQL 概述 SQL&#xff0c;一般发音为sequel&#xff0c;SQL的全称Structured Query Language)&#xff0c;SQL用来和数据库打交道&#xff0c;完成和数据库的通信&#xff0c;SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能,这…...

大数据面试题:MapReduce压缩方式

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Hadoop常见的压缩算法有哪些&#xff1f; 问过的一些公司&#xff1a;网易云音乐(2022.11)&#xff0c;阿里(2020.…...

【ICer的脚本练习】“精通各种语言的hello world!“

系列的目录说明请见&#xff1a;ICer的脚本练习专栏介绍与全流程目录_尼德兰的喵的博客-CSDN博客 前言 这一节呢主要是检查一下Linux和win环境是不是能正常的支持咱们的脚本学习&#xff0c;所以来答应各种语言的hello world!&#xff0c;毕竟打印了就是学会了٩(๑❛ᴗ❛๑)۶…...

解决npm install报错: No module named gyp

今天运行一个以前vue项目&#xff0c;启动时报错如下&#xff1a; ERROR Failed to compile with 1 error上午10:19:33 error in ./src/App.vue?vue&typestyle&index0&langscss& Syntax Error: Error: Missing binding D:\javacode\Springboot-MiMall-RSA\V…...

Leetcode 面试题 17.01 不用加号的加法

设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 我的答案&#xff1a; 一、信息 1.设计一个函数把两个数相加 2.不得使用或者其他运算符 3.a,b均为负数或…...

一个 MySQL 数据库死锁的案例和解决方案

本文介绍了一个 MySQL 数据库死锁的案例和解决方案。 场景 生产环境出了一个偶现的数据库死锁问题&#xff0c;导致少部分业务处理失败。 分析特征之后&#xff0c;发现是多个线程并发执行同一个方法&#xff0c;更新关联的数据时可能会出现&#xff0c;把场景简化概括一下&…...

AMBEO 双声道空间音频现已迈进直播制作领域

图片来源&#xff1a;Unsplash&#xff0c;作者&#xff1a;Bence Balla-Schottner AMBEO 双声道空间音频现已迈进直播制作领域 为所有观众解锁更加身临其境的听觉体验 森海塞尔将功能强大的 AMBEO 双声道空间音频技术引入了广播电视直播应用领域&#xff0c;对所有体育赛事广…...

在VSCode上画UML的三个插件

2023年9月2日&#xff0c;周六晚上 因为写代理模式的博客时需要画UML&#xff0c;所以就在网上找了半天&#xff0c; 最后觉得VSCode上的这三个插件比较好用 目录 三个画UML的VSCode插件PlantUMLDraw.io IntegrationUMLet我个人推荐使用PlantUML 三个画UML的VSCode插件 Pla…...

Springboot - 1.什么是springboot

&#x1f440;Spring的核心模块 Spring Framework是一个功能强大的开源框架&#xff0c;用于构建Java企业级应用程序。它提供了多个核心模块&#xff0c;每个模块都提供不同的功能&#xff0c;用于解决应用程序开发中的各种问题。以下是Spring Framework的核心模块的全面解析&…...

学习微信小程序 Westore

最近&#xff0c;接到小程序需求&#xff0c;并且是在以前公司老项目上改造&#xff0c;打开项目&#xff0c;发现却不是我想象中的那样&#xff0c;不是上来就是 Page({})&#xff0c;而是create(store,{})&#xff0c;纳尼&#xff1f;&#xff1f;&#xff1f;这什么玩意&am…...

CentOS上使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…...

Level-based Foraging 多智能体游戏仿真环境

游戏场景测试 参考链接&#xff1a; https://kgithub.com/semitable/lb-foraging...

LeetCode-53-最大子数组和-贪心算法

贪心算法理论基础&#xff1a; 局部最优推全局最优 贪心无套路~ 没有什么规律~ 重点&#xff1a;每个阶段的局部最优是什么&#xff1f; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#…...

城市建设投资公司 网站/hyein seo是什么牌子

微服务重点内容就是两大特性和三大功能&#xff1a; 两大特性&#xff1a;高可用性&#xff0c;高扩展性 三大功能&#xff1a;服务间通信&#xff0c;服务容错 异常排查&#xff0c;分布式能力建设 三大功能是指微服务核心组件的功能维度&#xff0c;由浅入深层次递进&#xf…...

wordpress 用户 权限/百度收录申请入口

1、系统管理1.1 连接MySQL格式&#xff1a; mysql -h主机地址 -u用户名 &#xff0d;p用户密码举例&#xff1a;例1&#xff1a;连接到本机上的MySQL。首先在打开DOS窗口&#xff0c;然后进入目录 mysqlbin&#xff0c;再键入命令"mysql –u root –p"&#xff0c;回…...

php开发系统网站建设/东营seo整站优化

一、工作中因为要使用到Tomcat集群部署&#xff0c;此时就涉及到了Session共享问题&#xff0c;主要有三种解决方案&#xff1a; 1、使用数据库来存储Session 2、使用Cookie来存储Session 3、使用Redis来存储Sesssion 二、本文中主要讲一下第3种方案&#xff0c;也就是使用Redi…...

做自营网站还是amazon/外贸网站建设公司

好了&#xff0c;就不多说了&#xff0c;事实上只要你有了足够的能力&#xff0c;能开始想老板所想的事&#xff0c;这时候你会发现&#xff0c;你也可以做老板了。 据我所知&#xff0c;很多程序员都是越过架构师这道坎&#xff0c;有了整体的架构布局思维&#xff0c;就开始…...

重庆做商城网站建设/衡水seo营销

隐藏页面元素主要使用style 的display/visibility属性或者调用hide()方法 1&#xff1a;隐藏后不占位&#xff0c;后面的元素补上前面元素的位置&#xff0c;影响后面页面的布局 style“display: none;” //隐藏 document.getElementById(“demo”).style.display“none” <…...

wordpress 获得分类名称/百度手机卫士

1 《泛型编程与STL》侯捷译or英文版 --------- 这本书里从STL的设计哲学切入&#xff0c;讲述了STL为什么要那样设计&#xff0c;五种迭代器如何把容器与算法完美地解耦合。它详细介绍了每一个STL容器与算法&#xff0c;包括接口原型、参数要求、执行时间复杂度等等。
看这本书…...