java模拟生日发祝福
1.新建customer表生日都选为当天
所需jar包
2.使用c3p0连接到数据的xml配置文件
3.连接数据库的工具类
- package com.cc.birthday;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import javax.sql.DataSource;
- import com.mchange.v2.c3p0.ComboPooledDataSource;
- public class DataSourceUtils {
- private static DataSource dataSource=new ComboPooledDataSource();
- private static ThreadLocal<Connection> t1=new ThreadLocal<Connection>();
- //直接可以获取一个连接池
- public static DataSource getDataSource(){
- return dataSource;
- }
- //获取连接对象
- public static Connection getConnection() throws SQLException{
- Connection con=t1.get();
- if(con==null){
- con=dataSource.getConnection();
- t1.set(con);
- }
- return con;
- }
- //开启事务
- public static void startTrasaction() throws SQLException {
- Connection con=getConnection();
- if(con!=null){
- con.setAutoCommit(false);
- }
- }
- //事务回滚
- public static void rollback() throws SQLException{
- Connection con =getConnection();
- if(con!=null){
- con.rollback();
- }
- }
- //提交并且 关闭资源及从ThreadLocal中释放
- public static void commitAndRelease() throws SQLException{
- Connection con=getConnection();
- if(con!=null){
- con.commit();
- con.close();
- t1.remove();
- }
- }
- //关闭资源方法
- public static void closeConnection() throws SQLException{
- Connection con=getConnection();
- if(con!=null){
- con.close();
- }
- }
- public static void closeStatement(Statement st) throws SQLException {
- if(st!=null){
- st.close();
- }
- }
- public static void closeResultSet(ResultSet rs) throws SQLException{
- if(rs!=null){
- rs.close();
- }
- }
- }
4.发送邮件的工具类
- package com.cc.mail;
- import java.util.Properties;
- import javax.mail.Authenticator;
- import javax.mail.Message;
- import javax.mail.MessagingException;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.AddressException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMessage.RecipientType;
- public class MailUtils {
- //email:邮件发给谁 subject:主题 emailMsg:邮件的内容
- public static void sendMail(String email, String subject, String emailMsg)
- throws AddressException, MessagingException {
- // 1.创建一个程序与邮件服务器会话对象 Session
- Properties props = new Properties();
- props.setProperty("mail.transport.protocol", "SMTP");//发邮件的协议
- props.setProperty("mail.host", "smtp.163.com");//发送邮件的服务器地址
- props.setProperty("mail.smtp.auth", "true");// 指定验证为true
- // 创建验证器
- Authenticator auth = new Authenticator() {
- public PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication("emailusername", "password");//发邮件的账号的验证
- }
- };
- Session session = Session.getInstance(props, auth);
- // 2.创建一个Message,它相当于是邮件内容
- Message message = new MimeMessage(session);
- message.setFrom(new InternetAddress("xxxxxx@163.com")); // 设置发送者
- message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
- message.setSubject(subject);//邮件的主题
- message.setContent(emailMsg, "text/html;charset=utf-8");
- // 3.创建 Transport用于将邮件发送
- Transport.send(message);
- }
- }
5.customer实体类
- package com.cc.birthday;
- public class Customer {
- private int id;
- private String username;
- private String password;
- private String realname;
- private String birthday;
- private String email;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getRealname() {
- return realname;
- }
- public void setRealname(String realname) {
- this.realname = realname;
- }
- public String getBirthday() {
- return birthday;
- }
- public void setBirthday(String birthday) {
- this.birthday = birthday;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
6.根据数据库查询结果使用调度器定时发送祝福邮件
- package com.cc.birthday;
- import java.sql.SQLException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.List;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.mail.MessagingException;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import org.apache.commons.dbutils.QueryRunner;
- import org.apache.commons.dbutils.handlers.BeanListHandler;
- import com.cc.birthday.Customer;
- import com.cc.mail.MailUtils;
- public class BirthdayListener implements ServletContextListener{
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- // 当web应用启动开启任务调动---功能在用户的生日当天发送邮件
- //开启一个定时器
- Timer timer=new Timer();
- timer.scheduleAtFixedRate(new TimerTask() {
- @Override
- public void run() {
- // 为当前的生日的用户发邮件
- //1.获得今天过生日的人
- //获得今天的日期
- SimpleDateFormat format=new SimpleDateFormat("MM-dd");
- String currentDate=format.format(new Date());
- //根据当前时间从数据库查询今天过生日的人
- QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
- String sql="select * from customer where birthday like ?";
- List<Customer> customerList=null;
- try {
- customerList = qr.query(sql, new BeanListHandler<Customer>(Customer.class),"%"+currentDate);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //2.发邮件
- if(customerList!=null&&customerList.size()>0){
- for(Customer c:customerList){
- String emailMsg="亲爱的:"+c.getRealname()+",生日快乐!";
- try {
- MailUtils.sendMail(c.getEmail(), "happy..birthday", emailMsg);
- System.out.println(c.getRealname()+"邮件发送完毕");
- } catch (MessagingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- },new Date(),10*1000);
- //实际开发中起始时间是一个固定的时间
- //实际开发中间隔时间是1天
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- // TODO Auto-generated method stub
- }
- }
java模拟生日发祝福的更多相关文章
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- websocket通信 实现java模拟一个client与webclient通信
发文原由: 熟悉socket通信的同学,对于socket模拟server与client,实现相互通信, 或者使用websocket与java模拟的websocket服务器通信(比如一个聊天室),对于这 ...
- 浏览器与服务器交互原理以及用java模拟浏览器操作v
浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...
- java模拟post请求发送json
java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...
- java 模拟qq源码
java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip
- java模拟开锁
java模拟开锁 service qq:928900200 Introduction to Computer Science II: CSCI142Fall 2014Lab #1Instructor: ...
- Jsoup实现java模拟登陆
Jsoup实现java模拟登陆 2013-10-29 14:52:05| 分类: web开发|举报|字号 订阅 下载LOFTER我的照片书 | 1:如何获取cookies. 1.1 ...
- [Java] 模拟HTTP的Get和Post请求
在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求 ...
- Java模拟登陆02【转载】
在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢? 方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...
随机推荐
- bootstrap设计进度条和圆点
1.设计进度条.文字前面的圆点和图片 2.思路: (1)设计进度条 (a) 进度条有滚动效果,要加上类.active (b)进度条的颜色通过类.progress-bar-success来写,可以写成. ...
- gettid 和pthread_self的区别
转: Linux中,每个进程有一个pid,类型pid_t,由getpid()取得.Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库 ...
- [转]ANDROID JNI之JAVA域与c域的互操作
本文讲述AndroidJava域与C域互操作:Java域调用c域的函数:c域访问Java域的属性和方法:c域生成的对象的保存与使用.重点讲解c域如何访问Java域. 虽然AndroidJNI实现中,c ...
- 一个python的文件对比脚本
脚本主要用来给游戏客户端做热更的. 处理方式就是针对每个文件求其MD5值,再根据文件的目录和名字对比两个版本的MD5值,如果不一样,则这次热更就需要更新这个文件. 用法很简单. 1,生成MD5码列表 ...
- 《Cracking the Coding Interview》——第16章:线程与锁——题目1
2014-04-27 19:09 题目:线程和进程有什么区别? 解法:理论题,操作系统教材上应该有很详细的解释.我回忆了一下,写了如下几点. 代码: // 16.1 What is the diffe ...
- CSS系列(7)CSS类选择器Class详解
这一篇文章,以笔记形式写. 1, CSS 类选择器详解 http://www.w3school.com.cn/css/css_selector_class.asp 知识点: (1) 使用类选择 ...
- CSS系列(5)-如何使用Firebug查看网页的html和css
Firebug是火狐浏览器Firefox的一个插件,专门为开发人员开发的.使用Firebug需要先在Firefox中安装这个插件,网上有很多教程,可以对照着安装一下. 不同的火狐浏览器版本中的Fire ...
- 去除文件夹中的.svn
一.在Dos窗口中运行如下命令 for/r <你项目的路径> %i in (.svn) do rd /s /q %i 二.将“Delete SVN Folders”操作添加到右击菜单中 建 ...
- eclipse里导入maven项目有红叉的解决办法
导入maven的项目上有红叉,说明eclipse里maven的插件该更新了 1.help里选择install new software 2.点击add,输入name:MavenArchiver, lo ...
- 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3
孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...