java模拟生日发祝福
Posted 篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java模拟生日发祝福相关的知识,希望对你有一定的参考价值。 所需jar包 以上是关于java模拟生日发祝福的主要内容,如果未能解决你的问题,请参考以下文章1.新建customer表生日都选为当天
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
}
}