SpringBoot整合JavaMail邮件

JavaMail邮件发送

文章目录

    • JavaMail邮件发送
      • 1.方式一:SpringBoot整合JavaMailSender
      • 2.方式二:java直接发送

1.方式一:SpringBoot整合JavaMailSender

1.yml配置提取

 application:  mail:smtp:#服务器主机名host: smtp.qq.com#服务器端口 port: 465#你的邮箱地址username: 5XXXxxxx1@qq.com#你的授权码password: xxxxx#编码格式defaultEncoding: utf-8#是否进行用户名密码校验auth: true#设置超时时间timeout: 20000#是否启用sslssl-enabled: true
/*** 邮件配置* @author li*/@Data
@ConfigurationProperties(prefix = "application.mail.smtp")
public class MailOptionProperties {/*** 服务器主机名*/private String host;/*** 服务器发送端口*/private String port;/*** 邮箱地址*/private String username;/*** 授权码*/private String password;/*** 编码格式*/private String defaultEncoding;/*** 是否进行用户名密码校验*/private String auth;/*** 设置超时时间*/private String timeout;/*** ssl启用*/private boolean sslEnabled;}

2.config配置

/*** 邮件配置* @author li*/@Configuration
@EnableConfigurationProperties({MailOptionProperties.class})
public class JavaMailConfig {@Autowiredprivate MailOptionProperties mailOptionProperties;@Beanpublic JavaMailSender javaMailSender() throws GeneralSecurityException {JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();javaMailSender.setHost(mailOptionProperties.getHost());javaMailSender.setUsername(mailOptionProperties.getUsername());javaMailSender.setDefaultEncoding(mailOptionProperties.getDefaultEncoding());javaMailSender.setPassword(mailOptionProperties.getPassword());Properties properties = new Properties();//开启认证properties.setProperty("mail.smtp.auth", mailOptionProperties.getAuth());//设置链接超时properties.setProperty("mail.smtp.timeout", mailOptionProperties.getTimeout());//启用调试properties.setProperty("mail.debug", "true");//设置端口properties.setProperty("mail.smtp.port", mailOptionProperties.getPort());//是否启用sslif(mailOptionProperties.getSslEnabled()){//设置ssl端口properties.setProperty("mail.smtp.socketFactory.port", mailOptionProperties.getPort());properties.setProperty("mail.smtp.socketFactory.fallback", "false");properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");//设置ssl加密MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", mailOptionProperties.getSslEnabled());properties.put("mail.smtp.ssl.socketFactory", sf);}javaMailSender.setJavaMailProperties(properties);return javaMailSender;}}

3.工具类

import java.io.File;
import java.util.Date;
import java.util.List;/*** mail邮件消息封装* @author li*/
@Data
public class MailMessage {/*** 收件人邮箱地址集合*/private List<String> recipient;/*** 抄送人*/private String [] cc;/*** 密送人*/private String [] bcc;/*** 发送时间*/private Date sendDate;/*** 邮件主题*/private String subject;/*** 邮件文本内容*/private String text;/*** 是否html格式打开*/private boolean isHtml = true;/*** 附件集合*/private List<File> fileList;}
import java.io.InputStream;/*** 文件数据封装*/
@Data
public class FileData {private InputStream inputStream;private String fileName;public FileData() {}public FileData(InputStream inputStream, String fileName) {this.inputStream = inputStream;this.fileName = fileName;}}
/*** 邮件发送工具类** @author li* @date 2024-05-14*/
@Component
@EnableConfigurationProperties({MailOptionProperties.class})
public class JavaMailOperation {static {//防止附件名太长被截断System.getProperties().setProperty("mail.mime.splitlongparameters", "false");}@Autowiredprivate JavaMailSender javaMailSender;/*** 发件人邮箱地址*/@Autowiredprivate MailOptionProperties mailOptionProperties;/*** 邮件发送** @param text         内容* @param subject      标题* @param emailAddress 收件人*/public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text, String emailAddress) throws Exception {MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");// 发件人messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));// 收件人邮箱messageHelper.setTo(new InternetAddress(emailAddress));// 邮件的主题messageHelper.setSubject(subject);// 邮件的文本内容,true表示文本以html格式打开messageHelper.setText(text, true);return messageHelper;}/*** 邮件发送** @param text         内容* @param subject      标题* @param emailAddress 收件人* @param cc           抄送* @param bcc          密送*/public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text,String emailAddress, String cc, String bcc) throws Exception {MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");// 发件人messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));// 收件人邮箱messageHelper.setTo(new InternetAddress(emailAddress));//抄送messageHelper.setCc(cc);//密送(不会在邮件收件人名单中显示出来)messageHelper.setBcc(bcc);//发送时间messageHelper.setSentDate(new Date());// 邮件的主题messageHelper.setSubject(subject);// 邮件的文本内容,true表示文本以html格式打开messageHelper.setText(text, true);return messageHelper;}public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text, String[] emailAddress) throws Exception {MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");// 发件人messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));// 收件人邮箱messageHelper.setTo(emailAddress);// 邮件的主题messageHelper.setSubject(subject);// 邮件的文本内容,true表示文本以html格式打开messageHelper.setText(text, true);return messageHelper;}/*** 邮件发送-单人** @param text         内容* @param subject      标题* @param emailAddress 收件人*/public void sendMail(String subject, String text, String emailAddress) throws Exception {// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();createMessageHelper(message, subject, text, emailAddress);//  发送邮件javaMailSender.send(message);}/*** 邮件发送-多收件人** @param text         内容* @param subject      标题* @param emailAddress 收件人*/public void sendMail(String subject, String text, String[] emailAddress) throws Exception {// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();createMessageHelper(message, subject, text, emailAddress);//  发送邮件javaMailSender.send(message);}/*** 邮件发送(带附件)** @param text         内容* @param subject      主题* @param fileName     文件名* @param inputStream  文件流* @param emailAddress 收件人*/public void sendMail(String subject, String text, String fileName,String emailAddress, InputStreamSource inputStream) throws Exception {// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);// 添加附件messageHelper.addAttachment(fileName, inputStream);//  发送邮件javaMailSender.send(message);}/*** 邮件发送(带附件)** @param text         内容* @param subject      标题* @param file         文件* @param emailAddress 收件人*/public void sendMail(String subject, String text, String emailAddress, File file) throws Exception {// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);// 添加附件messageHelper.addAttachment(file.getName(), file);//  发送邮件javaMailSender.send(message);}public void sendMail(String subject, String text, String emailAddress, List<File> files) throws Exception {// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);// 添加附件for (File file : files) {messageHelper.addAttachment(file.getName(), file);}//  发送邮件javaMailSender.send(message);}/*** 发送freemarker模板格式邮件** @param text         内容* @param subject      标题* @param emailAddress 收件人* @param files        附件*/public void sendFreemarkerMail(String subject, String text, String emailAddress, List<File> files) throws Exception {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);// 构建 Freemarker 的基本配置Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "templates");Template template = configuration.getTemplate("mail.ftl");// 模板渲染StringWriter out = new StringWriter();Map<String, Object> param = new HashMap<>();param.put("message", "ces");template.process(param, out);messageHelper.setText(out.toString(), true);// 添加附件for (File file : files) {messageHelper.addAttachment(file.getName(), file);}javaMailSender.send(message);}public void sendMail(MailMessage mailMessage)  {validateParam(mailMessage);try {logger.info("邮件发送开始。。。。。。。。。。。");// 创建邮件对象MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");// 发件人messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));//收件人集合List<String> recipient = mailMessage.getRecipient();if (CollectionUtils.isNotEmpty(recipient)) {// 收件人邮箱messageHelper.setTo(recipient.toArray(new String[0]));}//抄送String[] cc = mailMessage.getCc();if (cc != null && cc.length > 0) {messageHelper.setCc(cc);}//密送(不会在邮件收件人名单中显示出来)String[] bcc = mailMessage.getBcc();if (bcc != null && bcc.length > 0) {messageHelper.setBcc(bcc);}if (ObjectUtils.isNotEmpty(mailMessage.getSendDate())) {//发送时间messageHelper.setSentDate(mailMessage.getSendDate());}//附件List<File> fileList = mailMessage.getFileList();if (CollectionUtils.isNotEmpty(fileList)) {for (File file : fileList) {messageHelper.addAttachment(file.getName(), file);}}List<FileData> fileDataList = mailMessage.getFileDataList();if (CollectionUtils.isNotEmpty(fileDataList)) {for (FileData fileData : fileDataList) {messageHelper.addAttachment(fileData.getFileName(), new InputStreamResource(fileData.getInputStream()));}}// 邮件的主题messageHelper.setSubject(mailMessage.getSubject());// 邮件的文本内容,true表示文本以html格式打开messageHelper.setText(mailMessage.getText(), mailMessage.isHtml());//  发送邮件javaMailSender.send(message);logger.info("邮件发送结束。。。。。。。。。。。");} catch (Exception e) {logger.error("邮件发送失败。。。。。。。。。。。",e);}}private void validateParam(MailMessage mailMessage) {if (!StringUtils.hasText(mailMessage.getSubject())) {throw new Exception("邮件标题不能为空");} else if (!StringUtils.hasText(mailMessage.getText())) {throw new Exception("邮件内容不能为空");} else if (mailMessage.getRecipient().isEmpty()) {throw new Exception("收件人不能为空");}}}

测试


public class Test {protected Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate JavaMailOperation javaMailOperate;@Autowiredprivate RemoteFilesystemConfiguration configuration;@GetMapping("/mail")public void test() throws Exception {logger.info("邮件发送开始。。。。。。。。。。。");String subject = "发送测试";String text = "邮件内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";File file = new File("C:\\Users\\Desktop\\Stream流常用操作.md");InputStreamSource is = new FileSystemResource(file);javaMailOperate.sendMail(subject,text,file.getName(),"xxx@qq.com",is);logger.info("邮件发送结束。。。。。。。。。。。");}@GetMapping("/free")public void test1() throws Exception {String subject = "发送测试";String text = "邮件内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";File file = new File("C:\\Users\\Desktop\\Stream流常用操作.md");javaMailOperate.sendFreemarkerMail(subject,text,"xxx@qq.com", Collections.singletonList(file));}@GetMapping("/upload")public void test2(MultipartFile multipartFile) throws Exception {String subject = "发送测试";String text = "邮件内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";String originalFilename = multipartFile.getOriginalFilename();InputStream is = multipartFile.getInputStream();InputStreamSource iss = new InputStreamResource(is);javaMailOperate.sendMail(subject,text,originalFilename,"xxx@qq.com",iss);}@GetMapping("/msg")public void test3() throws Exception {File file = new File("C:\\Users\\tjx\\Desktop\\Stream流常用操作.md");MailMessage mailMessage = new MailMessage();mailMessage.setRecipient(Collections.singletonList("xxx@qq.com"));mailMessage.setCc(new String[]{"xxx@qq.com"});mailMessage.setBcc(new String[]{"li5xxxx1@126.com"});mailMessage.setSendDate(new Date());mailMessage.setSubject("发送测试");mailMessage.setText("内容");mailMessage.setHtml(true);mailMessage.setFileList(Collections.singletonList(file));javaMailOperate.sendMail(mailMessage);}//流文件测试@GetMapping("/msg1")public void test4(String url) throws Exception {MailMessage mailMessage = new MailMessage();mailMessage.setRecipient(Collections.singletonList("xxx@qq.com"));mailMessage.setCc(new String[]{"xxx@qq.com"});mailMessage.setBcc(new String[]{"xxx@126.com"});mailMessage.setSendDate(new Date());mailMessage.setSubject("发送测试");mailMessage.setText("内容");FTPClient ftpClient =new FTPClient() ;try {ftpClient.connect(configuration.getHost(),configuration.getPort());ftpClient.login(configuration.getUsername(), configuration.getPassword());ftpClient.setBufferSize(1024);// 设置文件类型(二进制)ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ByteArrayOutputStream out = new ByteArrayOutputStream();ftpClient.retrieveFile(url, out);List<FileData> fileDataList = Lists.newArrayList();fileDataList.add(new FileData(new ByteArrayInputStream(out.toByteArray()),"测试1.txt"));javaMailOperate.sendMail(mailMessage);} catch (IOException e) {e.printStackTrace();}finally {ftpClient.logout();ftpClient.disconnect();}}}

2.方式二:java直接发送

       <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency>
import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;import java.io.File;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;public class MailUtils {public static void sendMail(String email, String emailMsg, List<File> files)throws GeneralSecurityException {// 发件人电子邮箱String fromAddress = "xxx@qq.com";// 指定发送邮件的主机为 smtp.qq.com QQ 邮件服务器String host = "smtp.qq.com";// 获取系统属性Properties properties = System.getProperties();//开启认证properties.setProperty("mail.smtp.auth", "true");//启用调试properties.setProperty("mail.debug", "true");//设置链接超时properties.setProperty("mail.smtp.timeout", "1000");//设置端口properties.setProperty("mail.smtp.port", "465");//设置ssl端口properties.setProperty("mail.smtp.socketFactory.port", "465");properties.setProperty("mail.smtp.socketFactory.fallback", "false");properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 设置邮件服务器properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);// 获取默认session对象Session session = Session.getDefaultInstance(properties, new Authenticator() {@Overridepublic PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("xxxx@qq.com", "xxx"); //发件人邮件用户名、密码}});try {// 创建默认的 MimeMessage 对象MimeMessage message = new MimeMessage(session);// Set From: 发件人message.setFrom(new InternetAddress(fromAddress,"li","UTF-8"));// Set To: 收件人message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));//设置邮件主题message.setSubject("测试","UTF-8");message.setText("这是一封激活邮件,请<a href='#'>点击</a>","UTF-8");// 设置消息体String content = "<h1>邮件发送测试</h1><h3><div style=\"color: red\">" + emailMsg + "</div></h3>";Multipart multipart = new MimeMultipart();//邮件正文BodyPart contentPart = new MimeBodyPart();//邮件文字contentPart.setContent(content, "text/html;charset=utf-8");multipart.addBodyPart(contentPart);if (files!=null&&!files.isEmpty()) {//添加附件for (File attachment : files) {BodyPart attachmentPart = new MimeBodyPart();DataSource source = new FileDataSource(attachment);attachmentPart.setDataHandler(new DataHandler(source));//避免中文乱码的处理attachmentPart.setFileName(MimeUtility.encodeWord(attachment.getName()));multipart.addBodyPart(attachmentPart);}}message.setContent(multipart);message.saveChanges();// 发送消息Transport.send(message);System.out.println("Sent message successfully....");} catch (Exception mex) {mex.printStackTrace();}}public static void main(String[] args) throws AddressException, MessagingException, GeneralSecurityException {MailUtils.sendMail("xxx@qq.com", "abcdefg", Arrays.asList(new File("C:\\Users\\Desktop\\Stream流常用操作.md")));}
}

附件名称太长被截断问题,启动类添加

System.getProperties().setProperty("mail.mime.splitlongparameters", "false");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot3多模块项目工程搭建-下(团队开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 Common模块 DAO模块 Service模块 Web模块 API模块 写在最后 写在前面 本文介绍了springboot开发后端服务&#xff0c;多模块项目工程搭建&#xff0c;各模块的…

ZL-016D多通道小鼠主动跑轮系统主要研究动物生活节律

简单介绍&#xff1a; 多通道小鼠主动跑轮系统是由动物本身自发运动来推动跑轮转动。在这种构型中&#xff0c;笼内动物长期活动的信息&#xff0c;如跑轮转动方向、转数、累计总行程等&#xff0c;能够使用编码器进行长度计记录。此装置由转轮组件、笼体、以及转动方向速度传…

勒索软件漏洞?在不支付赎金的情况下解密文件

概述 在上一篇文章中&#xff0c;笔者对BianLian勒索软件进行了研究剖析&#xff0c;并且尝试模拟构建了一款针对BianLian勒索软件的解密工具&#xff0c;研究分析过程中&#xff0c;笔者感觉构建勒索软件的解密工具还挺有成就感&#xff0c;因此&#xff0c;笔者准备再找一款…

uniapp外部scss文件使用scss语法不生效,

项目场景&#xff1a; 页面的样式重复我想提取出来作为公共样式 新建scss文件&#xff0c;然后引入&#xff0c;结果样式不生效 问题描述&#xff1a; uniapp官网示例引入css的方法 /* 绝对路径 */ import url(/common/uni.css); import url(/common/uni.css); /* 相对路径 …

企业OA办公系统开发笔记:2、MyBatis-Plus

文章目录 企业办公系统&#xff1a;2、MyBatis-Plus一、MyBatis-Plus1、简介2、主要特点3、依赖 二、MyBatis-Plus入门1、配置文件2、启动类3、实体类4、添加Mapper类5、测试Mapper接口6、CRUD测试6.1、insert添加6.1.1、示例6.1.2、主键策略 6.2、更新6.3、删除6.3.1、根据id删…

第十一届蓝桥杯大赛软件类决赛 Java A 组

文章目录 发现宝藏【考生须知】试题 A: 合数个数试题 B : 含 2 天数试题 C: 本质上升序列试题 D: 迨尺天涯试题 E: 玩具蛇试题 F: 游园安排试题 G: 画廊试题 H: 奇偶覆盖试题 I: 补给试题 J: 蓝跳跳 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

【Python】Python中的除法运算

在 Python 中&#xff0c;除法运算可以通过几种不同的运算符来执行&#xff0c;主要包括普通除法 (/) 和整除 (//)&#xff0c;还有取余运算 (%)&#xff0c;这些运算符有各自的特定用途和行为。 1. 普通除法 (/) 普通除法运算符 / 用于执行标准的除法运算&#xff0c;结果总…

【Linux】使用Valgrind定位内存增长问题

文章目录 1 内存问题2 Valgrind2.1 Valgrind介绍2.2 Valgrind中的Memcheck2.3 Valgrind中的Massif 3 总结 1 内存问题 内存问题是一类比较难以定位的问题&#xff0c;通常有两类场景&#xff1a; 程序在低负载情况下的内存使用量是否正常&#xff0c;低负载情况下不应该太高程…

Python基础语法【1】

做个简单的总结 1.输出 直接通过print函数进行输出 print("Hello") 2.变量 2.1命名规则 变量名只能包含字母、数字和下划线。变量名能以字母或下划线打头&#xff0c;但不能以数字打头。例如&#xff0c;可将变量命名为message_1&#xff0c;但不能将其命名为1…

spring-activiti 一些操作

文章目录 一、bpmn文件部署二、发起一个流程三、查找任务四、提交/完成任务五、流程定义的查询六、流程的删除七、流程历史信息查看八、指派任务九、委派任务十、放回任务十一、回退任务十二、终止任务 一、bpmn文件部署 AurowardRepositoryService rep;//通过流区创建一个工作…

什么是 PowerShell

什么是 PowerShell&#xff1f; PowerShell 是一种跨平台的任务自动化解决方案&#xff0c;由命令行 shell、脚本语言和配置管理框架组成。 PowerShell 在 Windows、Linux 和 macOS 上运行。 命令行 Shell ​ PowerShell 是新式命令 shell&#xff0c;其中包括其他常用 shel…

(接上一篇linux rocky 搭建DNS高阶版)实现不同网段访问解析不同的服务器并加域

上一篇链接&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域-CSDN博客文章浏览阅读417次&#xff0c;点赞13次&#xff0c;收藏7次。使用linux rocky 搭建DNS服务&#xff0c;用于独立AD域控DNS存在&#xff0c;并且实现加域。https://blog.c…

【算法刷题day53】Leetcode:1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

文章目录 Leetcode 1143. 最长公共子序列解题思路代码总结 Leetcode 1035. 不相交的线解题思路代码总结 Leetcode 53. 最大子数组和解题思路代码总结 草稿图网站 java的Deque Leetcode 1143. 最长公共子序列 题目&#xff1a;1143. 最长公共子序列 解析&#xff1a;[代码随想录…

数字集成电路物理设计[陈春章]——知识总结与精炼01

第一章 集成电路物理设计方法 1.1 数字集成电路设计挑战 1.2 数字集成电路设计流程 前两节内容讲述的是数字集成电路发展与流程&#xff0c;知识体系比较宏观和简单&#xff0c;请读者自行了解即可。 1.3 数字集成电路设计收敛 实现设计收敛任务&#xff1a;①数据系统;②优…

Flume 的安装和使用方法(Spark-2.1.0)

一、Flume的安装 1.下载压缩包 https://www.apache.org/dyn/closer.lua/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2.上传到linux中 3.解压安装包 cd #进入加载压缩包目录sudo tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local # 将 apache-flume-1.7.0-bin.tar.g…

夯实spring(二十一):@Scope、@DependsOn、@ImportResource、@Lazy

本文问题: 1. Scope是做什么的&#xff1f;常见的用法有几种&#xff1f;2. DependsOn是做什么的&#xff1f;常见的用法有几种&#xff1f;3. ImportResource干什么的&#xff1f;通常用在什么地方&#xff1f;4. Lazy做什么的&#xff0c;通常用在哪些地方&#xff1f;常见的…

leetcode-15. 三数之和

题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组…

有哪些值得买的开放式耳机推荐?2024年开放式运动耳机选购指南

开放式耳机因其独特设计&#xff0c;能在一定程度上保护听力。相较于传统封闭式耳机&#xff0c;开放式设计允许周围环境声音自然流入耳内&#xff0c;降低了耳内共振和声压&#xff0c;减少了耳道的不适感&#xff0c;从而减轻了对听力的潜在损害。对于追求音质与听力保护并重…

iOS git创建与合并分支

参考文章 Git – 创建与合并分支 相关命令行解释 1. 创建并切换到该分支&#xff1a; 2.0.0是新建的分支的名字 git checkout -b 2.0.0 相当于下面这两句 创建分支 git branch 2.0.0 切换到某个分支 git checkout 2.0.0 2. 查看当前所有分支&#xff1a; git branch 如何提…

国外新闻媒体推广:多元化媒体分发投放-大舍传媒

前言 &#xff1a;随着全球化的进程&#xff0c;国外新闻市场呈现出快速发展的趋势。在这个趋势下&#xff0c;国外新闻媒体推广成为了各行业企业宣传业务的重要一环。本文将重点介绍大舍传媒的多元化媒体分发投放服务&#xff0c;以及对国外新闻媒体推广的意义。 1. 多元化媒…