BenjaminYang In solitude, where we are least alone

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
        
    }
    
}

 

posted @ 2018-06-27 16:58  benjamin杨  阅读(4234)  评论(0编辑  收藏  举报