2010-02-18 13 views
5

Estoy escribiendo una secuencia de comandos de carga de base de datos en ColdFusion. Carga alrededor de 150,000 registros en una docena de tablas. Estoy ejecutando el script a través de una solicitud del navegador web. ¿Hay alguna forma de matar el proceso una vez que he solicitado la página? Puedo detener la página en el navegador, pero las inserciones de la base de datos continúan en el backend hasta que el script se haya completado, lo que hace que el proceso de depuración sea muy lento ya que tengo que ejecutar todo el script cada vez. ¿Hay algo que pueda hacer a través del backend de Java?¿Matar un proceso en ejecución en ColdFusion?

El entorno en el que estoy es ColdFusion 8 corriendo a través de IIS. Tengo la supervisión del rendimiento desactivada, pero me gustaría poder imitar la capacidad de matar trabajos como en el monitor de rendimiento.

Respuesta

3

He intentado hacer algo parecido al archivo pid de Unix: el script debería periódicamente (tal vez cada 10/100/1000 iteraciones) verificar la disponibilidad de algún archivo en el sistema de archivos y detener la ejecución si contiene cierto valor, o tal vez si existe o no en absoluto.

Por supuesto, este puede ser un campo en la base de datos, variable en el alcance de la aplicación (con la estrategia de bloqueo adecuada) o cualquier cosa que encuentre adecuada.

También necesita un segundo script que cambiará el estado de su "pid-object". Esto puede ser tan simple como otro .cfm que puede extraer con el navegador.

+0

Una solución muy simple. El siguiente código lo hizo por mí: ' ' – stomcavage

2

En el ciclo de los 150,000 registros, puede detenerlo en el número que considere apropiado. Establezca una variable de contador y cada vez que llegue allí en el bucle solo <cfabort> o <cfbreak>.

0

con algunos productos como fusionreactor, puede eliminar el subproceso java subyacente, pero si la base de datos tiene realmente el control de la solicitud, no puede hacer que se detenga (en la base de datos). Tienes que esperar hasta que la base de datos devuelva el control del hilo.

2

Es probable que desee ejecutar el proceso usando cfthread.

Comience el proceso como ...

<cfthread name="myThread" action="run"> 
    ...Your loop to insert into database.... 
</cfthread> 

A continuación, puede matar al hilo mediante el uso de ...

<cfthread action="terminate" name="myThread"/> 
+0

Esto puede matar el hilo cf, liberando recursos cf, pero dependiendo de la ubicación del la base de datos es, continuará terminando su último comando ejecutado. No estoy completamente seguro de qué pasaría con los datos parciales, dependiendo de cómo estaba/no estaba envuelto en la transacción y/o qué tipo de enlace/bucle estaba sucediendo. – williambq

1

Si tiene software de gestión tales como FusionReactor instalado, puede utilizar ese para detener la ejecución de scripts.

Cuestiones relacionadas