自动执行java代码,java自动编程

如何在oracle数据更新时自动执行java代码,谢绝使用监听器,抓包等功能,因为产生的数量实在太大。

写一个after update的trigger,再写一个存储过程,trigger调用存储过程,存储过程调用java程序。

成都创新互联主营淮安网站建设的网络公司,主营网站建设方案,重庆APP开发公司,淮安h5小程序设计搭建,淮安网站营销推广欢迎淮安等地区企业咨询

----------------------------建立一个java存储过程

1. 先看一下这个目录

[oracle@ocean ~]$ pwd

/home/oracle

[oracle@ocean ~]$ ls -l

total 8

-rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash

2. 连接到test用户

SQL conn test/test

Connected.

3. 授于test用户文件读写和执行命令的权限

SQLexec dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','ALL FILES','read,write,execute,delete');

PL/SQL procedure successfully completed.

SQLexec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );

PL/SQL procedure successfully completed.

4. 建立java存储过程,注意,这里的exp 路径和dmp文件的路径是数据库服务器的路径

create or replace and compile java source named "aa"

as

import java.io.*;

import java.lang.*;

import java.util.*;

import java.sql.*;

import oracle.sql.*;

public class aa

{

public static void invoke_exe() throws IOException

{

Process p=Runtime.getRuntime().exec("/oracle/product/9.2.4/bin/exp userid=test/test file=/home/oracle/test.dmp");

try

{

p.waitFor();

}catch(InterruptedException ie){System.out.println(ie);}

}

}

/

Java created.

Elapsed: 00:00:00.01

5. 建立调用java存储过程的存储过程call_aa

create or replace procedure call_aa

as language java

name 'aa.invoke_exe()';

/

6. 执行java存储过程

exec call_aa;

7. 检查一下dmp文件是否已经生成

[oracle@ocean ~]$ pwd

/home/oracle

[oracle@ocean ~]$ ls -l

total 28

-rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash

-rw-r--r-- 1 oracle orains 16384 Jul 3 14:12 test.dmp

-----------------

exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', 'ALL FILE', 'read ,write, execute, delete');

exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', 'd:aa.bat', 'read ,write, execute, delete');

exec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );

java Web 启动时自动执行代码的几种方式

Web容器启动后执行代码的几种方式

其执行顺序为:

4===5===1===2===3

即指定init-method的Bean开始执行

接着实现spring的Bean后置处理器开始执行

然后是Servlet的监听器执行

再接下来是Servlet的过滤器执行

最后才是Servlet执行

1、实现Servlet监听器接口ServletContextListener

[java] view plain copy

public class InitListener implements ServletContextListener {

@Override

public void contextDestroyed(ServletContextEvent context) {

}

@Override

public void contextInitialized(ServletContextEvent context) {

// 上下文初始化执行

System.out.println("================[ServletContextListener]自动加载启动开始.");

SpringUtil.getInstance().setContext(

span style="white-space:pre" /spanWebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())

span style="white-space:pre" /span);

}

}

然后在web.xml文件配置该监听器

[html] view plain copy

listener

listener-classcom.test.init.InitListener/listener-class

/listener

2、实现Servlet的过滤器Filter

[html] view plain copy

public class InitFilter implements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,

ServletException {

}

@Override

public void init(FilterConfig config) throws ServletException {

System.out.println("================[Filter]自动加载启动开始.");

// 读取Spring容器中的Bean[此时Bean已加载,可以使用]

//写启动需要执行的代码

System.out.println("================[Filter]自动加载启动结束.");

}

}

然后在web.xml文件配置过滤器即可

[html] view plain copy

filter

filter-nameInitFilter/filter-name

filter-classcom.test.init.InitFilter/filter-class

/filter

filter-mapping

filter-nameInitFilter/filter-name

url-pattern//url-pattern

/filter-mapping

3、编写一个Servlet,在web.xml里面配置容器启动后执行即可

[html] view plain copy

public class InitServlet extends HttpServlet {

/**

*/

private static final long serialVersionUID = 1L;

@Override

public void init(ServletConfig config) {

try {

super.init();

} catch (ServletException e) {

e.printStackTrace();

}

System.out.println("================[Servlet]自动加载启动开始.");

// 读取Spring容器中的Bean[此时Bean已加载,可以使用]

//执行想要的代码

System.out.println("================[Servlet]自动加载启动结束.");

}

}

然后在web.xml文件配置该Servlet的启动方式为:容器启动后执行

servlet

servlet-nameInitServlet/servlet-name

servlet-classcom.test.init.InitServlet/servlet-class

init-param

param-nameusername/param-name

param-valuetest/param-value

/init-param

!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行 --

load-on-startup2/load-on-startup

/servlet

servlet-mapping

servlet-nameInitServlet/servlet-name

url-pattern//url-pattern

/servlet-mapping

关于启动后执行,由load-on-startup指定:

(1)当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。值越小,启动优先级越高;

(2)当是一个负数时或者没有指定时,表示该servlet被调用时才加载。

4、如果你使用Spring IOC作为Bean管理容器,那么可以指定init-method其中init-method表示bean加载成功后,立即执行某个方法。配置如下:start为要执行的方法名称

[html] view plain copy

!-- service --

bean id="shopService" class="com.test.teach.service.ShopService" span style="color:#33ffff;"init-method="start"/span

property name="shopDao" ref="shopDao" /

/bean

java 定时器字自动执行方法

为了不阻塞主线程,定时器应该开辟一个子线程去完成。

需要每秒轮询检测时间点是否符合条件。

示例代码如下:

public static void main(String[] args){

new Thread(){

private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

public void run() {

while(true){

try {

String currentTimeStr = sdf.format(new Date());

System.out.println("w=" + currentTimeStr);

if(currentTimeStr.equals("00:00")){

A();

System.out.println(currentTimeStr);

}

sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

private void A(){

System.out.println("夜深了,该休息了。");

}

}.start();

//阻塞主线程,不让程序结束。

while(true);

}


新闻标题:自动执行java代码,java自动编程
网站URL:http://ybzwz.com/article/dscehpo.html