先写一个Event继承EventObject
package com.lbx.listong.servlet;
import java.util.EventObject;
public class LocationEvent extends EventObject {
private static final long serialVersionUID = 1L;
private Object obj;
public LocationEvent(Object source) {
super(source);
obj = source;
}
public Object getSource(){
return obj;
}
}
然后写一个接口继承EventListener
package com.lbx.listong.servlet;
import java.util.EventListener;
public interface LocationListener extends EventListener {
public void locationEvent(LocationEvent le);
}
测试这个监听,实现他的接口
package com.lbx.listong.servlet;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.lbx.listong.service.LocationService;
import com.lbx.listong.thread.ListThread;
public class TestLocationListener implements LocationListener {
private LocationService ls;
public TestLocationListener() {
ls = new LocationService();
ls.addLocationListener(this); //注册监听
System.out.println("添加监听器完毕");
try {
// 调用此方法触发事件,触发的事件就是执行locationEvent(接口的方法)的方法
ls.addLocation("insert into tb_location (companyId,mobile,longitude,latitude,locationTime) values(2,'444','4','4','2011-03-23 11:03:04')");
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void locationEvent(LocationEvent le) {
// TODO Auto-generated method stub
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(new ListThread(), 0, 2, TimeUnit.SECONDS);
}
}
LocationService的代码,主要是一些业务的代码,里面只写了增加一个记录触发一个事件
package com.lbx.listong.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
import com.lbx.listong.DBUtil.DB;
import com.lbx.listong.servlet.LocationEvent;
import com.lbx.listong.servlet.LocationListener;
import com.lbx.listong.servlet.TestLocationListener;
public class LocationService {
private Connection conn = null;
List list = new ArrayList();
String sql = "select * from tb_location";
Statement st = null;
private Vector repository = new Vector();
private LocationListener ll;
public LocationService()
{
}
//注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public void addLocationListener(LocationListener ll)
{
repository.addElement(ll);//这步要注意同步问题
}
//如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public void notifyLocationEvent(LocationEvent event) {
Enumeration e = repository.elements();//这步要注意同步问题
while(e.hasMoreElements())
{
ll = (LocationListener)e.nextElement();
ll.locationEvent(event);
}
}
//删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
public void removeLocationListener(LocationListener ll)
{
repository.remove(ll);//这步要注意同步问题
}
public List getLocationList(){
conn = DB.getConnection();
try {
st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
String longitude = rs.getString("longitude");
list.add(longitude);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public void addLocation(String sql){
boolean b = false;
conn = DB.getConnection();
try {
st = conn.createStatement();
int id = st.executeUpdate(sql);
if(id>0){
b = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//添加一个记录成功就通知事件,然后执行接口的方法
if(b){
System.out.println("sss");
notifyLocationEvent(new LocationEvent(this));
}
}
public static void main(String[] args){
new TestLocationListener();
}
}
相关推荐
Android 数据库内容变化的监听机制是 Android 系统中一种重要的机制,通过 ContentResolver 类提供的三个方法,开发者可以轻松地监听数据库中的内容变化,并及时地更新应用程序的数据。 知识点: 1. ...
在Java编程中,监听数据库的变化是一项重要的任务,特别是在实时数据处理和系统监控的场景下。以下将详细讲解如何使用Java实现数据库监听,并提供一个代码实例作为参考。 首先,要实现数据库监听,我们需要理解两种...
2. **数据准备**:从MySQL数据库中查询需要导出的数据,通常通过JDBC或MyBatis等ORM框架实现。 3. **使用EasyExcel写入数据**:调用EasyExcel.write方法,传入文件路径和映射的Java对象,然后遍历数据集,将每条数据...
监听器是 Oracle 数据库服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。监听器的设置是在数据库服务器端完成的。监听器的主要功能是对客户端连接请求进行合法检查,如果连接请求有效,...
在描述的场景中,"使用SignalR实时推送数据库变化"是指构建一个系统,当数据库中的数据发生变化时,能够立即通知到客户端,而无需客户端频繁地查询数据库以获取最新状态。这对于实时应用,如股票交易、在线聊天或者...
1、proxool官网,下载最新的proxool-...3、创建自定义数据库连接池监听 4、整合Struts2、Spring和proxool,配置Web服务启动配置文件[web.xml] 5、整合Spring和proxool,配置应用上下文配置文件[applicationContext.xml]
在Android开发中,将数据库中的数据展示在ListView上是一项常见的任务。这通常涉及到与后端服务器的交互,数据的获取,以及数据适配器的使用。以下是对这一过程的详细阐述: 首先,我们需要建立Android应用与后台...
1. 自定义监听器类:开发者可能创建了实现上述接口之一或多个的自定义类,用于监听特定的事件并执行相应的操作。 2. 注册监听器:在web.xml配置文件中,我们需要将自定义的监听器类与对应的监听器接口关联,这样...
在这个过程中,你可以自定义事件监听器,处理读取到的每一行数据。然后,根据这些对象的属性,构建SQL语句,通过JdbcTemplate或者MyBatis的SqlSession来执行插入操作,将数据存入数据库。 在整个过程中,需要注意...
4. **自定义监听器** 开发者可以创建自己的监听器类,只需让类实现相应的监听器接口,并覆盖接口中定义的方法。例如,实现`ServletContextListener`需要覆盖`contextInitialized`和`contextDestroyed`方法。 5. **...
在Java Web开发中,Session是服务器用来跟踪用户状态的重要机制。...通过学习这个小例子,你可以更深入地理解如何在Java Web应用中使用Session监听器,并将其应用于自己的项目中,提升应用程序的管理和安全性。
在这个例子中,我们将探讨如何利用Servlet监听器在系统启动时创建一个自定义容器。 首先,我们需要了解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的类,这些接口定义了对Web应用生命...
3. **数据库连接池监听器**: 在数据库管理中,像C3P0或HikariCP这样的连接池库提供了连接创建和销毁的监听机制,帮助开发者监控和管理数据库连接资源。 4. **网络监听器**: 网络监听器通常用于监听网络连接和数据...
在实际应用中,我们可能需要自定义监听器来满足特定需求,例如: - **监控和日志记录**:创建一个监听器记录应用程序的启动和停止,或者跟踪特定事件,如Action的执行或异常情况。 - **资源初始化**:在应用程序...
在提供的"listener.rar"文件中,可能包含了自定义监听器的实现代码示例,这将有助于理解如何编写和注册监听器,以及它们在实际应用中的用途。 通过深入学习JNDI数据库连接池和监听器,开发者能够优化应用性能,更好...
Servlet监听器技术是Java Servlet规范中的一项重要特性,它允许开发者在特定的Servlet容器事件发生时执行自定义的代码逻辑。这些事件可以包括Web应用程序的初始化、终止,或者是Servlet或Servlet上下文...
Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)配置 本文主要介绍 Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)的配置,旨在帮助读者了解 Oracle 网络连接配置的主要组件和配置方法。 一、监听器...
Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...
通过实现特定的接口,我们可以创建自定义监听器,以在Web应用的不同阶段介入并执行业务逻辑。 在"j2ee20:servlet04监听器(监听四大web域)"中,四大Web域指的是请求域、会话域、应用域和上下文域。这四个域提供了在...