SpringBoot 集成MyBatis 集成quratz

港控/mmm° 2022-05-25 09:05 477阅读 0赞

SpringBoot集成MyBatis

项目中我集成了AOP 自己封装了一套CRUD 操作 和统一异常处理等等,其实都挺简单的 想要的朋友请留言 在这里我就不贴了

首先需要搭建一个SpringBoot 项目,然后在集成MyBatis 好了 步入正题
pom 文件

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.zhangheng</groupId>
  4. <artifactId>springBootDemo</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. <name>SpringBootDemo</name>
  7. <description>SpringBootDemo</description>
  8. <parent>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-parent</artifactId>
  11. <version>1.4.0.RELEASE</version>
  12. </parent>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <!-- 引入web项目依赖 -->
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <!-- jpa 依赖 暂时没用到 -->
  25. <!-- <dependency> -->
  26. <!-- <groupId>org.springframework.boot</groupId> -->
  27. <!-- <artifactId>spring-boot-starter-data-jpa</artifactId> -->
  28. <!-- </dependency> -->
  29. <!-- mybatis 依赖 -->
  30. <dependency>
  31. <groupId>org.mybatis.spring.boot</groupId>
  32. <artifactId>mybatis-spring-boot-starter</artifactId>
  33. <version>1.3.1</version>
  34. </dependency>
  35. <!-- mybatis的分页插件 -->
  36. <dependency>
  37. <groupId>com.github.pagehelper</groupId>
  38. <artifactId>pagehelper</artifactId>
  39. <version>4.1.6</version>
  40. </dependency>
  41. <!-- 引入Aop -->
  42. <dependency>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-starter-aop</artifactId>
  45. </dependency>
  46. <!-- actuator 监控 -->
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-actuator</artifactId>
  50. </dependency>
  51. <!-- 权限控制 -->
  52. <dependency>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-starter-security</artifactId>
  55. </dependency>
  56. <!-- devtools 开发效率快 热部署 -->
  57. <dependency>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-devtools</artifactId>
  60. <optional>true</optional>
  61. </dependency>
  62. <dependency>
  63. <groupId>mysql</groupId>
  64. <artifactId>mysql-connector-java</artifactId>
  65. <scope>runtime</scope>
  66. </dependency>
  67. <dependency>
  68. <groupId>com.alibaba</groupId>
  69. <artifactId>druid</artifactId>
  70. <version>1.1.0</version>
  71. </dependency>
  72. <!-- thymeleaf 渲染引擎 -->
  73. <dependency>
  74. <groupId>org.springframework.boot</groupId>
  75. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  76. </dependency>
  77. <!-- 添加对quartz的支持 -->
  78. <dependency>
  79. <groupId>org.quartz-scheduler</groupId>
  80. <artifactId>quartz</artifactId>
  81. <version>2.3.0</version>
  82. </dependency>
  83. <!-- 发邮件依赖jar -->
  84. <dependency>
  85. <groupId>org.springframework.boot</groupId>
  86. <artifactId>spring-boot-starter-mail</artifactId>
  87. </dependency>
  88. <dependency>
  89. <groupId>log4j</groupId>
  90. <artifactId>log4j</artifactId>
  91. <version>1.2.17</version>
  92. </dependency>
  93. </dependencies>
  94. <build>
  95. <plugins>
  96. <plugin>
  97. <groupId>org.springframework.boot</groupId>
  98. <artifactId>spring-boot-maven-plugin</artifactId>
  99. </plugin>
  100. <plugin>
  101. <groupId>org.apache.maven.plugins</groupId>
  102. <artifactId>maven-compiler-plugin</artifactId>
  103. <configuration>
  104. <source>${java.version}</source>
  105. <target>${java.version}</target>
  106. </configuration>
  107. </plugin>
  108. </plugins>
  109. </build>
  110. </project>

上面的配置其实挺简单的 基本都有说明 如果有不明白的小伙伴请留言 下面是我程序的入口:

  1. package com.zhangheng;
  2. import java.util.Properties;
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.EnableAspectJAutoProxy;
  8. import com.github.pagehelper.PageHelper;
  9. /** * 程序启动入口 * * @author zhangh * @date 2018年4月26日上午9:16:27 */
  10. @SpringBootApplication
  11. @EnableAspectJAutoProxy
  12. @MapperScan("com.zhangheng.dao")
  13. public class Application {
  14. /** * @author zhangh * @date 2018年4月28日下午5:18:38 * @param args */
  15. public static void main(String[] args) {
  16. SpringApplication.run(Application.class, args);
  17. // 下面的代码可以自定义banner 还可以控制banner的显示方式(log console off)
  18. // SpringApplication app = new SpringApplication(Application.class);
  19. // app.setBannerMode(Banner.Mode.OFF);
  20. // app.run(args);
  21. }
  22. @Bean
  23. public PageHelper pageHelper() {
  24. PageHelper pageHelper = new PageHelper();
  25. Properties properties = new Properties();
  26. properties.setProperty("rowBoundsWithCount", "true");
  27. properties.setProperty("reasonable", "true");
  28. properties.setProperty("dialect", "mysql");
  29. pageHelper.setProperties(properties);
  30. return pageHelper;
  31. }
  32. }

下面是我的包结构:
源码结构
资源

接下来讲讲配置文件application.yml:
这是程序的主配置文件入口 推荐使用yml格式 内容如下:

  1. ## 主配置文件 这里存放的是公共的配置信息
  2. # 激活对应的环境的配置文件
  3. spring:
  4. profiles:
  5. active: dev
  6. # 模板引擎为html 位置在templates下
  7. mvc:
  8. view:
  9. prefix: classpath:/templates
  10. suffix: .html

application-dev.yml 的内容如下:这里我集成了许多Spring 模块 如Actuator 监控,security 安全等 具体大家去看吧 还是那句话 不懂的请留言 我尽量第一时间回复

  1. # 服务器的端口和contextPath的配置
  2. server:
  3. port: 10086
  4. contextPath: /springboot
  5. # Actuator 监控访问端口 默认值跟上面的端口一样
  6. management:
  7. port: 10087
  8. context-path: /manage
  9. spring:
  10. datasource: # 数据库的配置 用的是阿里的druid连接池
  11. url: jdbc:mysql://localhost:3306/mytest
  12. username: root
  13. password: 111111
  14. driver-class-name: com.mysql.jdbc.Driver
  15. type: com.alibaba.druid.pool.DruidDataSource
  16. initialSize: 5
  17. minIdle: 5
  18. maxActive: 20
  19. maxWait: 60000
  20. timeBetweenEvictionRunsMillis: 60000
  21. minEvictableIdleTimeMillis: 300000
  22. validationQuery: SELECT 1 FROM DUAL
  23. testWhileIdle: true
  24. testOnBorrow: false
  25. testOnReturn: false
  26. poolPreparedStatements: true
  27. maxPoolPreparedStatementPerConnectionSize: 20
  28. filters: stat,wall,log4j
  29. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
  30. devtools: # 热部署机制 需要依赖一个jar
  31. restart:
  32. enabled: true
  33. mail:
  34. host: smtp.163.com
  35. username: zhsj201314@163.com
  36. password: your password
  37. # MyBatis 的配置
  38. mybatis:
  39. typeAliasesPackage: com.zhangheng.entity
  40. mapperLocations: classpath:mapper/*.xml # 日志管理 logging: level: com: zhangheng: dao: debug file: logs/spring-boot-logging.log # 权限验证 security: user: name: iflytek2018 password: iflytek2018 # endpoints 介绍 endpoints: shutdown: enabled: false #true 强制下线 info: ##自定义info的id id: myAppInfo info: app: name: springBootDemo version: v0.0.1 author: hengzhang2@iflytek.com author: name: zhangheng email: hengzhang2@iflytek.com age: 18 neck: 永远18岁

说点自己的心得吧
软件行业 相信大家第一感受就是钱多 如果你觉得你的付出和汇报不成比例 难免会不定期的跳槽,那么问题来了 怎么更好的面试呢? 我个人觉得 养成一个良好的编程习惯非常重要。下面我就说说自己的编程习惯:
1 我对代码的认知非常强,一个单词就应该要表达出它的意思。项目中不要随意的命名;
2 多学习java 的多种设计模式,我不推荐大家去死记硬背,要结合项目灵活的使用;
3 要时刻告诉自己一个方法不能超过20行,如果超过了该怎么办;
4 项目中尽量不要出现一些莫名其妙的数字或者字符串,尽量放到一个常量类或者是枚举类中,不过我推荐大家用枚举,因为枚举本身是一个类 类就有方法 我们还可以操作它们,从而更灵活。
5 要有点责任心,完成自己的任务然后在离职;
6 每天设定一个计划 定期去总结,哪怕今天的计划没实现都没关系 因为设定一个计划是让自己始终保持一个去学习的动力。

Spring Boot 集成quratz

由于上面我们的pom文件已经加入了对应的maven坐标 所以下面我们直接配置quratz,在这里我说一点 spring默认是不管理quratz 中的bean 的 ,因为它把权力交给了quratz,所以在job中注入spring中的bean是不生效了 这也是大家的关系点。有许多中方法可以解决 下面我将用一种简单的方法。

quartz.properties 内容 其实没啥难度 不懂的可以去官网查 如果还不懂请留言

  1. ## 如果是集群部署 该值设置成true 同时instanceId设置成AUTO 因为要保证集群中的每个实例都是唯一的
  2. #org.quartz.jobStore.isClustered=true
  3. #org.quartz.scheduler.instanceId=AUTO
  4. #org.quartz.scheduler.instanceId=mySchedulerId
  5. org.quartz.scheduler.rmi.export=false
  6. org.quartz.scheduler.rmi.proxy=false
  7. org.quartz.scheduler.wrapJobExecutionInUserTransaction=false
  8. org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
  9. org.quartz.threadPool.threadCount=15
  10. org.quartz.threadPool.threadPriority=5
  11. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=false
  12. org.quartz.jobStore.misfireThreshold=5000
  13. # 存储在内存中
  14. #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
  15. #定时任务存储在数据库中
  16. org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
  17. org.quartz.jobStore.tablePrefix=QRTZ_
  18. org.quartz.jobStore.dataSource=qzDS
  19. org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  20. org.quartz.dataSource.qzDS.driver=com.mysql.jdbc.Driver
  21. org.quartz.dataSource.qzDS.URL=jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=UTF-8
  22. org.quartz.dataSource.qzDS.user=root
  23. org.quartz.dataSource.qzDS.password=111111
  24. org.quartz.dataSource.qzDS.maxConnections=10

下面是我的发邮箱job类
`package com.iflytek.ifi.quartz.myjob;

import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.iflytek.ifi.quartz.entity.MyJob;
import com.iflytek.ifi.quartz.entity.User;
import com.iflytek.ifi.quartz.service.impl.UserServiceImpl;
import com.iflytek.ifi.quartz.util.SendMailUtil;

/**
* 发邮件job
*
* @author zhangh
* @date 2018年5月7日下午3:46:19
*/
@Component(“sendEmailJob”)
public class SendEmailJob extends MyJob implements Job {
private static Logger logger = Logger.getLogger(SendEmailJob.class);

  1. @Autowired
  2. private SendMailUtil sendMailUtil;
  3. @Autowired
  4. private UserServiceImpl userService;
  5. /**
  6. * 发邮件的具体内容
  7. *
  8. */
  9. @Override
  10. public void execute(JobExecutionContext context) {
  11. JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
  12. String email = jobDataMap.getString("email");
  13. String emailType = jobDataMap.getString("emailType");// 1 普通邮件 2模板邮件 默认是普通邮件
  14. String phone = jobDataMap.getString("phone");
  15. logger.info(context.getJobDetail().getKey().getGroup()+ phone + context.getJobDetail().getDescription());
  16. if("2".equals(emailType)){
  17. try {
  18. sendMailUtil.sendTemplateMail(email, "模板邮件", jobDataMap);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. }else{
  23. sendMailUtil.sendMail(email, "审核邮件", "恭喜您审核通过");
  24. }
  25. userService.add(new User(phone));
  26. }
  27. public SendEmailJob() {}

}`

job 处理类
`package com.iflytek.ifi.quartz.service.impl;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.iflytek.ifi.quartz.entity.JobEntity;
import com.iflytek.ifi.quartz.service.JobService;

@Service(“jobService”)
public class JobServiceImpl implements JobService {

  1. @Autowired
  2. @Qualifier("Scheduler")
  3. private Scheduler scheduler;
  4. @Value("${myJob.alias.dir}")
  5. private String dir;
  6. @Override
  7. public void addJob(JobEntity jobEntity) throws Exception {
  8. // 启动调度器
  9. // scheduler.start();
  10. // 构建job信息
  11. JobDetail jobDetail = JobBuilder.newJob(getClass(jobEntity.getJobClassName()).getClass())
  12. .withIdentity(jobEntity.getJobClassName(), jobEntity.getJobGroupName())
  13. .withDescription(jobEntity.getJobDescription())
  14. .storeDurably(jobEntity.getDurabe())
  15. .usingJobData(jobEntity.getJobDataMap())
  16. .build();
  17. // 表达式调度构建器(即任务执行的时间)
  18. CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(jobEntity.getCronExpression());
  19. // 按新的cronExpression表达式构建一个新的trigger
  20. CronTrigger trigger = TriggerBuilder.newTrigger()
  21. .withIdentity(jobEntity.getJobClassName(), jobEntity.getJobGroupName())
  22. .withSchedule(scheduleBuilder)
  23. .build();
  24. scheduler.scheduleJob(jobDetail, trigger);
  25. if(!jobEntity.getStartWork()){
  26. scheduler.pauseJob(JobKey.jobKey(jobEntity.getJobClassName(), jobEntity.getJobGroupName()));
  27. }
  28. }
  29. private Job getClass(String classname) throws Exception {
  30. Class<?> class1 = Class.forName(dir+classname.substring(0, 1).toUpperCase()+classname.substring(1));
  31. return (Job) class1.newInstance();
  32. }
  33. @Override
  34. public void deleteJob(String name,String group) throws SchedulerException {
  35. scheduler.deleteJob(JobKey.jobKey(name, group));
  36. }
  37. @Override
  38. public void startJob() throws SchedulerException {
  39. if(!scheduler.isStarted()){
  40. scheduler.start();
  41. }
  42. }
  43. @Override
  44. public void startDelayed(int seconds) throws SchedulerException {
  45. scheduler.startDelayed(seconds);
  46. }
  47. @Override
  48. public void shutdown() throws SchedulerException {
  49. if(!scheduler.isShutdown()){
  50. scheduler.shutdown();
  51. }
  52. }
  53. @Override
  54. public void shutdown(boolean waitForJobsToComplete) throws SchedulerException {
  55. scheduler.shutdown(waitForJobsToComplete);
  56. }
  57. @Override
  58. public void pauseJob(String name,String group) throws SchedulerException {
  59. scheduler.pauseJob(JobKey.jobKey(name, group));
  60. }
  61. @Override
  62. public void pauseTrigger(String name,String group) throws SchedulerException {
  63. scheduler.pauseTrigger(TriggerKey.triggerKey(name, group));
  64. }
  65. @Override
  66. public void resumeJob(String name,String group) throws SchedulerException {
  67. scheduler.resumeJob(JobKey.jobKey(name, group));
  68. }
  69. @Override
  70. public void resumeTrigger(String name,String group) throws SchedulerException {
  71. scheduler.resumeTrigger(TriggerKey.triggerKey(name, group));
  72. }
  73. @Override
  74. public void pauseAll() throws SchedulerException {
  75. scheduler.pauseAll();
  76. }
  77. @Override
  78. public void resumeAll() throws SchedulerException {
  79. scheduler.resumeAll();
  80. }

}
`

  1. package com.iflytek.ifi.quartz.service;
  2. import org.quartz.SchedulerException;
  3. import com.iflytek.ifi.quartz.entity.JobEntity;
  4. public interface JobService {
  5. /** * 添加任务 * * @author zhangh * @date 2018年5月8日上午8:40:46 * @param jobEntity * @throws Exception */
  6. public void addJob(JobEntity jobEntity) throws Exception;
  7. /** * 根据任务名称和分组删除任务 * * @author zhangh * @date 2018年5月8日上午8:40:59 * @param name * @param group * @throws SchedulerException */
  8. public void deleteJob(String name, String group) throws SchedulerException;
  9. /** * 开始所有任务 * * @author zhangh * @date 2018年5月8日上午8:41:21 */
  10. public void startJob() throws SchedulerException;
  11. /** * 延迟seconds 秒后启动所有任务 * * @author zhangh * @date 2018年5月8日上午8:44:44 * @param seconds * 秒 */
  12. public void startDelayed(int seconds) throws SchedulerException;
  13. /** * 关闭所有任务 * * @author zhangh * @date 2018年5月8日上午8:53:39 * @throws SchedulerException */
  14. public void shutdown() throws SchedulerException;
  15. /** * 关闭所有任务时 是否等所有的任务执行完毕才关闭 * * @author zhangh * @date 2018年5月8日上午8:54:25 * @param waitForJobsToComplete * @throws SchedulerException */
  16. public void shutdown(boolean waitForJobsToComplete) throws SchedulerException;
  17. /** * 暂停任务 * @author zhangh * @date 2018年5月8日下午1:48:24 * @param jobKey * @throws SchedulerException */
  18. public void pauseJob(String name,String group) throws SchedulerException;
  19. /** * 暂停触发器 * @author zhangh * @date 2018年5月8日下午1:58:02 * @param triggerKey * @throws SchedulerException */
  20. public void pauseTrigger(String name,String group) throws SchedulerException;
  21. /** * 唤醒任务 * @author zhangh * @date 2018年5月8日下午1:58:13 * @param jobKey * @throws SchedulerException */
  22. public void resumeJob(String name,String group) throws SchedulerException;
  23. /** * 唤醒触发器 * @author zhangh * @date 2018年5月8日下午1:58:25 * @param triggerKey * @throws SchedulerException */
  24. public void resumeTrigger(String name,String group) throws SchedulerException;
  25. /** * 暂停所有任务 * @author zhangh * @date 2018年5月8日下午1:58:35 * @throws SchedulerException */
  26. public void pauseAll() throws SchedulerException;
  27. /** * 唤醒所有任务 * @author zhangh * @date 2018年5月8日下午1:58:44 * @throws SchedulerException */
  28. public void resumeAll() throws SchedulerException;
  29. }
  30. package com.iflytek.ifi.quartz.util;
  31. import java.io.File;
  32. import javax.mail.MessagingException;
  33. import javax.mail.internet.MimeMessage;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.beans.factory.annotation.Value;
  36. import org.springframework.mail.SimpleMailMessage;
  37. import org.springframework.mail.javamail.JavaMailSender;
  38. import org.springframework.mail.javamail.MimeMessageHelper;
  39. import org.springframework.stereotype.Component;
  40. import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
  41. import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
  42. import freemarker.template.Template;
  43. /** * 邮件发送工具类 * * @author zhangh * @date 2018年5月10日下午3:00:32 */
  44. @Component
  45. public class SendMailUtil {
  46. @Value("${spring.mail.username}")
  47. private String emailFrom;
  48. @Autowired
  49. private FreeMarkerConfigurer freeMarkerConfigurer; // 自动注入
  50. @Autowired
  51. private JavaMailSender mailSender;
  52. /** * 发送普通邮件 * * @author zhangh * @date 2018年5月10日下午2:53:03 * @param sendTo * @param subject * @param content */
  53. public void sendMail(String sendTo, String subject, String content) {
  54. SimpleMailMessage message = new SimpleMailMessage();
  55. message.setFrom(emailFrom);
  56. message.setTo(sendTo);
  57. message.setSubject(subject);
  58. message.setText(content);
  59. mailSender.send(message);
  60. }
  61. /** * 发送html邮件 * * @author zhangh * @date 2018年5月10日下午2:58:53 * @param sendTo * @param subject * @throws MessagingException */
  62. public void sendHtmlMail(String sendTo, String subject, String htmlContent) throws MessagingException {
  63. MimeMessage mimeMessage = mailSender.createMimeMessage();
  64. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
  65. mimeMessageHelper.setFrom(emailFrom);
  66. mimeMessageHelper.setTo(sendTo);
  67. mimeMessageHelper.setSubject(subject);
  68. mimeMessageHelper.setText(htmlContent, true);
  69. mailSender.send(mimeMessage);
  70. }
  71. /** * 发送带附件的邮件 * * @author zhangh * @date 2018年5月10日下午3:09:45 * @param sendTo * @param subject * @param content * @param file * @throws MessagingException */
  72. public void sendAttachmentMail(String sendTo, String subject, String content, File file) throws MessagingException {
  73. MimeMessage mimeMessage = mailSender.createMimeMessage();
  74. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
  75. mimeMessageHelper.setFrom(emailFrom);
  76. mimeMessageHelper.setTo(sendTo);
  77. mimeMessageHelper.setSubject(subject);
  78. mimeMessageHelper.setText(content);
  79. mimeMessageHelper.addAttachment("image.jpg", file);
  80. mailSender.send(mimeMessage);
  81. }
  82. /** * 发送有静态资源的邮件 * * @author zhangh * @date 2018年5月10日下午3:26:48 * @param sendTo * @param subject * @param content * @param file * @throws MessagingException */
  83. public void sendInlineMail(String sendTo, String subject, String content, File file) throws MessagingException {
  84. MimeMessage mimeMessage = mailSender.createMimeMessage();
  85. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
  86. mimeMessageHelper.setFrom(emailFrom);
  87. mimeMessageHelper.setTo(sendTo);
  88. mimeMessageHelper.setSubject(subject);
  89. mimeMessageHelper.setText("<html><body>带静态资源的邮件内容 图片:<img src='cid:picture' /></body></html>", true);
  90. mimeMessageHelper.addInline("picture", file);
  91. mailSender.send(mimeMessage);
  92. }
  93. /** * 发送模板邮件 * @author zhangh * @date 2018年5月11日上午10:23:11 * @param sendTo * @param subject * @param model * @throws Exception */
  94. public void sendTemplateMail(String sendTo, String subject,Object model) throws Exception {
  95. MimeMessage mimeMessage = mailSender.createMimeMessage();
  96. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
  97. mimeMessageHelper.setFrom(emailFrom);
  98. mimeMessageHelper.setTo(sendTo);
  99. mimeMessageHelper.setSubject(subject);
  100. Template template = freeMarkerConfigurer.getConfiguration().getTemplate("mail.ftl");
  101. String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
  102. mimeMessageHelper.setText(html, true);
  103. mailSender.send(mimeMessage);
  104. }
  105. public SendMailUtil() {
  106. }
  107. }

代码太多了 还是整个git仓库吧

https://github.com/853827276/springBootQuratz
https://github.com/853827276/springBoot

大家下载去看吧 纯手写 累死了

发表评论

表情:
评论列表 (有 0 条评论,477人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot集成MyBatis

    需求描述:使用SpringBoot集成MyBatis. 需求分析: 需要完成的几点要求: 1. 建议采用xml进行管理sql语句,不建议使用MyBatis提供的Sq