
PromotionListener.java
~~~
package zyw.promotion;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import zyw.bean.Product;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
@WebListener()
public class PromotionListener implements ServletContextListener{
public PromotionListener() {
}
public void contextInitialized(ServletContextEvent sce) {
Timer timer=new Timer();//創建定時器
//1.要執行的任務2.第一次執行的時間3.間隔的時長
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {//快捷鍵,選中代碼塊,Ctrl+Art+t
ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource();
QueryRunner queryRunner=new QueryRunner(comboPooledDataSource);
String sql="select * from product";
List<Product> productList = queryRunner.query(sql, new BeanListHandler<Product>(Product.class));
// 獲取商品信息后遍歷 商品 根據不同的種類,修改不同的價格
if (productList!=null&&productList.size()>0){
for (Product product : productList) {
if (product.getC_id()==1){
//數碼產品
BigDecimal p_price = product.getP_price();
//減100元
BigDecimal temp=new BigDecimal(100);
p_price=p_price.subtract(temp);
//將修改好的價格設置給對象
product.setP_price(p_price);
System.out.println(product.getP_name()+"現在打折促銷啦,只要"+ product.getP_price()+"就可以拿回家啦!");
}else {
//數碼產品
BigDecimal p_price = product.getP_price();
//減100元
BigDecimal temp=new BigDecimal(10);
p_price=p_price.subtract(temp);
//將修改好的價格設置給對象
product.setP_price(p_price);
System.out.println(product.getP_name()+"現在打折促銷啦,只要"+ product.getP_price()+"就可以拿回家啦!");
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}, new Date(), 1000*20);
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
~~~
Product.java
~~~
package zyw.bean;
import java.math.BigDecimal;
public class Product {
private int p_id;
private String p_name;
private BigDecimal p_price;
private String p_image;
private int c_id;
@Override
public String toString() {
return "Product{" +
"p_id=" + p_id +
", p_name='" + p_name + '\'' +
", p_price=" + p_price +
", p_image='" + p_image + '\'' +
", c_id=" + c_id +
'}';
}
public Product() {
}
public int getP_id() {
return p_id;
}
public void setP_id(int p_id) {
this.p_id = p_id;
}
public String getP_name() {
return p_name;
}
public void setP_name(String p_name) {
this.p_name = p_name;
}
public BigDecimal getP_price() {
return p_price;
}
public void setP_price(BigDecimal p_price) {
this.p_price = p_price;
}
public String getP_image() {
return p_image;
}
public void setP_image(String p_image) {
this.p_image = p_image;
}
public int getC_id() {
return c_id;
}
public void setC_id(int c_id) {
this.c_id = c_id;
}
}
~~~
c3p0-config.xml放在src目錄下
~~~
<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config>
<!-- 默認配置,如果沒有指定則使用這個配置 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://122.14.200.136:3306/javadb</property>
<property name="user">root</property>
<property name="password">6a133f0024</property>
<!-- 初始化池大小 -->
<property name="initialPoolSize">5</property>
<!-- 最大空閑時間 -->
<property name="maxIdleTime">30</property>
<!-- 最多有多少個連接 -->
<property name="maxPoolSize">10</property>
<!-- 最少幾個連接 -->
<property name="minPoolSize">5</property>
<!-- 每次最多可以執行多少個批處理語句 -->
<property name="maxStatements">50</property>
</default-config>
<!-- 命名的配置 -->
<named-config name="51zixue"><!--這里是設置配置文件的名字-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://122.14.200.136:3306/javadb</property>
<property name="user">root</property><!--mysql的登陸名-->
<property name="password">6a133f0024</property><!--如果沒密碼就可以設置成<property name="password"></property>-->
<property name="acquireIncrement">5</property><!-- 如果池中數據連接不夠時一次增長多少個 -->
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">15</property>
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him -->
</named-config>
</c3p0-config>
~~~
jar包

數據庫


結果,每隔20秒刷新一次

- 學習心得
- 將jar包加入項目中
- Servlet
- 編寫第一個Servlet
- 使用Servlet3.0創建Servlet
- HttpServletRequest簡介-獲取請求行和請求頭
- HttpServletResponse獲取請求參數
- response對象發送響應行和響應頭
- HttpServletResponse發送請求體
- 【實例】驗證碼
- Servlet的生命周期
- ServletConfig對象
- ServletContext-獲取項目初始化參數
- ServletContext對象-在多個Servlet之間共享參數
- 請求轉發
- 【實例】登錄錯誤時顯示錯誤界面
- 重定向介紹
- 網頁的自動刷新
- Servlet線程安全
- 案例 文件下載
- Cookie與Session會話技術
- 會話技術概述
- Cookie的會話流程
- 獲取Cookie
- 【案例 】記錄網站上一次訪問時間
- Session的會話流程
- 使用Session域對象存取數據
- Session的生命周期和持久化
- 【實例】購物車的簡單使用
- JSP技術
- JSP指令
- JSP隱式對象
- JSP標簽
- JSTL標簽庫
- EL表達式
- EL的內置對象和執行表達式
- JSTL簡介
- JSTL-if標簽
- JSTL-forEach標簽
- 【案例】實現商品列表展示
- MySQL數據庫
- SQL語句
- 命名規則與數據類型
- SQL-增刪改查
- 設計數據庫
- JDBC的應用
- JDBC連接數據庫
- 查詢
- 插入.刪除.修改
- Junit單元測試
- 預防SQL注入
- JDBCutils工具類
- 監聽器Listener
- ServletContextListener
- HttpSessionListener和ServletRequestListener
- 域對象屬性監聽器
- 對象感知監聽器
- 【案例】商品促銷活動推廣
- 過濾器Filter
- 創建一個過濾器
- Filter生命周期和配置
- 【案例】解決中文輸出亂碼問題
- XML入門
- XML元素和解析方式
- XML約束
- 實戰-生鮮后臺管理系統
- MVC和三層架構
- 項目需求和項目搭建
- 數據庫設計
- 注冊功能
- 登錄功能
- 記住密碼
- BeanUtils的使用
- Servlet的抽取(上)
- Servlet的抽取(下)
- 增加生鮮種類
- 查詢生鮮列表
- 分頁功能
- 修改生鮮信息
- 刪除生鮮功能
- 權限控制Filter