maven新建web工程 + spring 4.0.5.RELEASE + quartz 2.2.1 做java的定时器(二)

上一篇文章中介绍了,怎么用maven新建一个webapp工程。

这里就介绍个简单的定时器了。

先看一下pom.xml吧。 里面的数据库链接还没有用上

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>jsolo-batch</groupId>
	<artifactId>jsolo-batch</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>jsolo-batch Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<javax.servlet.version>3.0.0.v201112011016</javax.servlet.version>
		<junit.version>3.8.1</junit.version>
		<!-- Quartz版本号 -->
		<quartz.version>2.2.1</quartz.version>
		<!-- Spring版本号 -->
		<spring.version>4.0.5.RELEASE</spring.version>

		<!-- logback日志文件管理包版本 -->
		<slf4j.version>1.6.6</slf4j.version>
		<logbackorg.version>1.1.2</logbackorg.version>
		<logback.ext.spring.version>0.1.1</logback.ext.spring.version>
	</properties>


	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- Spring -->


		<!-- Quartz -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>${quartz.version}</version>
		</dependency>
		<!-- Quartz -->

		<!-- 日志文件管理包 -->
		<!-- log start -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logbackorg.version}</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>${logback.ext.spring.version}</version>
			<scope>runtime</scope>
		</dependency>
		<!-- log end -->
		<!-- 日志文件管理包 -->

		<!-- 由数据库连接池、插件框架和SQL解析器组成 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
		<!-- 由数据库连接池、插件框架和SQL解析器组成 -->

		<dependency>
			<groupId>org.eclipse.jetty.orbit</groupId>
			<artifactId>javax.servlet</artifactId>
			<version>${javax.servlet.version}</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>jsolo-batch</finalName>
	</build>
</project>


新建一代码文件夹


文件夹名称:src/main/java

如果新建不了,请直接到磁盘中去新建java文件夹。路径:磁盘:工作控件/jsolo-batch\src\main

新建文件夹 conf  ,新建文件:logback.xml                spring-quartz.xml              spring.xml




将上记的 配置文件,配置到 web.xml中


web.xml

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<!-- 配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:conf/spring.xml,
			classpath:conf/spring-quartz.xml
		</param-value>
	</context-param>

	<!-- spring配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!--初始化日志配置文件 -->
	<context-param>
		<param-name>logbackConfigLocation</param-name>
		<param-value>classpath:conf/logback.xml</param-value>
	</context-param>
	<listener>
		<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
	</listener>
</web-app>

logback.xml  内容非本人写的 感谢: http://sunney2010.iteye.com/blog/1404729     sunney2010

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
	<property name="LOG_HOME" value="/home" />
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n</pattern>
		</encoder>
	</appender>
	<!-- 按照每天生成日志文件 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志文件输出的文件名 -->
			<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
			<!--日志文件保留天数 -->
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n</pattern>
		</encoder>
		<!--日志文件最大的大小 -->
		<triggeringPolicy
			class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>10MB</MaxFileSize>
		</triggeringPolicy>
	</appender>

	<!--myibatis log configure -->
	<logger name="com.apache.ibatis" level="TRACE" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" />

	<!-- 日志输出级别 -->
	<root level="DEBUG">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
	<!--日志异步到数据库 -->
	<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
		<!--日志异步到数据库 -->
		<connectionSource
			class="ch.qos.logback.core.db.DriverManagerConnectionSource">
			<!--连接池 -->
			<dataSource class="org.apache.commons.dbcp.BasicDataSource">
				<driverClass>com.mysql.jdbc.Driver</driverClass>
				<url>jdbc:mysql://127.0.0.1:3306/community</url>
				<user>root</user>
				<password>root</password>
			</dataSource>
		</connectionSource>
	</appender>
</configuration>

spring-quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	<!-- 定时服务定义 -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!-- 自动启动 -->
		<property name="autoStartup">
			<value>true</value>
		</property>
		<property name="triggers">
			<list>
				<ref bean="mailSendTriggerBean" />
			</list>
		</property>
	</bean>

	<!-- ******** 邮件控制 开始 ******** -->
	<bean id="mailSendTriggerBean"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="mailSendDetailBean" />
		</property>

		<!-- 过一秒开始,每间隔两秒执行 -->
		<property name="cronExpression">
			<value>1/2 * * * * ?</value>
		</property>
	</bean>

	<bean id="mailSendDetailBean"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 执行batch的执行抽象父类 -->
		<property name="targetObject" ref="MailRunnerTimer"></property>
		<!-- 执行batch的执行方法 -->
		<property name="targetMethod" value="exec"></property>
		<property name="concurrent" value="false" />
	</bean>
	<bean id="MailRunnerTimer" class="org.jsoloframework.app.batch.runner.MailSendRunner"></bean>
	<!-- ******** 邮件控制 结束 ******** -->
</beans>



结构如下:




以下为包:

包:org.jsoloframework.app.batch.runner

类:MailSendRunner.java

代码:

package org.jsoloframework.app.batch.runner;

import org.jsoloframework.app.batch.runner.base.BaseAbstractRunner;

public class MailSendRunner extends BaseAbstractRunner {

	public void exec() {
		this.mailSenderService.initMail();
	}
}


包:org.jsoloframework.app.batch.runner.base
类:BaseAbstractRunner.java
代码:

package org.jsoloframework.app.batch.runner.base;

import org.jsoloframework.app.batch.service.MailSenderService;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class BaseAbstractRunner{
	
	/** 所有的runner类都继承 此类,则Service类都在此注入即可,@Autowired 为自动注入 ----START---- */
	@Autowired
	protected MailSenderService mailSenderService;
	/** 所有的runner类都继承 此类,则Service类都在此注入即可,@Autowired 为自动注入 ----END----   */
}



包:org.jsoloframework.app.batch.service
类:MailSenderService.java

代码:

package org.jsoloframework.app.batch.service;

import org.springframework.stereotype.Service;

@Service
public class MailSenderService {
	public void initMail() {
		System.out.println("batch开始啦。。。。。");
	}
}

配置tomact服务



新建一个server准备运行吧;




六月 03, 2014 7:47:33 下午 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_13\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:\mysqlwinx64\bin;C:\Program Files (x86)\Borland\Delphi7\Bin;C:\Program Files (x86)\Borland\Delphi7\Projects\Bpl\;E:\apache\apache-maven-3.2.1\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Common Files\Autodesk Shared\;C:\Program Files (x86)\Autodesk\Backburner\;C:\MinGW\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.6\;.
六月 03, 2014 7:47:33 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:jsolo-batch' did not find a matching property.
六月 03, 2014 7:47:34 下午 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
六月 03, 2014 7:47:34 下午 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
六月 03, 2014 7:47:34 下午 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1384 ms
六月 03, 2014 7:47:34 下午 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
六月 03, 2014 7:47:34 下午 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.53
六月 03, 2014 7:47:35 下午 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\wspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\jsolo-batch\WEB-INF\lib\javax.servlet-3.0.0.v201112011016.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
六月 03, 2014 7:47:38 下午 org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
六月 03, 2014 7:47:38 下午 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
六月 03, 2014 7:47:38 下午 org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization started
六月 03, 2014 7:47:38 下午 org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
INFO: Refreshing Root WebApplicationContext: startup date [Tue Jun 03 19:47:38 CST 2014]; root of context hierarchy
六月 03, 2014 7:47:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [conf/spring.xml]
六月 03, 2014 7:47:39 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [conf/spring-quartz.xml]
19:47:39.871 [localhost-startStop-1] INFO  org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
19:47:39.909 [localhost-startStop-1] INFO  o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
19:47:39.910 [localhost-startStop-1] INFO  org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.1 created.
19:47:39.912 [localhost-startStop-1] INFO  org.quartz.simpl.RAMJobStore - RAMJobStore initialized.
19:47:39.913 [localhost-startStop-1] INFO  org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

19:47:39.913 [localhost-startStop-1] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' initialized from an externally provided properties instance.
19:47:39.913 [localhost-startStop-1] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1
19:47:39.915 [localhost-startStop-1] INFO  org.quartz.core.QuartzScheduler - JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@3f424adc
六月 03, 2014 7:47:39 下午 org.springframework.context.support.DefaultLifecycleProcessor start
INFO: Starting beans in phase 2147483647
19:47:39.928 [localhost-startStop-1] INFO  org.quartz.core.QuartzScheduler - Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED started.
六月 03, 2014 7:47:39 下午 org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now
六月 03, 2014 7:47:39 下午 org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 1335 ms
19:47:39.936 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
六月 03, 2014 7:47:39 下午 org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' = [D:\wspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\jsolo-batch\]
六月 03, 2014 7:47:39 下午 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Logback from [classpath:conf/logback.xml]
19:47:39.948 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
19:47:39.950 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.mailSendDetailBean
batch开始啦。。。。。
batch开始啦。。。。。
六月 03, 2014 7:47:42 下午 org.apache.catalina.core.ApplicationContext log
INFO: JUL to SLF4J bridge is not available on the classpath
六月 03, 2014 7:47:42 下午 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
六月 03, 2014 7:47:42 下午 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
六月 03, 2014 7:47:42 下午 org.apache.catalina.startup.Catalina start
INFO: Server startup in 8374 ms
2014-06-03 19:47:43.000 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 0 triggers
2014-06-03 19:47:43.000 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] DEBUG org.quartz.core.JobRunShell -
				Calling execute on job DEFAULT.mailSendDetailBean
batch开始啦。。。。。
2014-06-03 19:47:43.002 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 1 triggers
2014-06-03 19:47:45.001 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 0 triggers
2014-06-03 19:47:45.001 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4] DEBUG org.quartz.core.JobRunShell -
				Calling execute on job DEFAULT.mailSendDetailBean
batch开始啦。。。。。
2014-06-03 19:47:45.002 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 1 triggers
2014-06-03 19:47:47.002 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-5] DEBUG org.quartz.core.JobRunShell -
				Calling execute on job DEFAULT.mailSendDetailBean
batch开始啦。。。。。
2014-06-03 19:47:47.003 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 1 triggers
2014-06-03 19:47:49.001 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 0 triggers
2014-06-03 19:47:49.001 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6] DEBUG org.quartz.core.JobRunShell -
				Calling execute on job DEFAULT.mailSendDetailBean
batch开始啦。。。。。
2014-06-03 19:47:49.002 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] DEBUG org.quartz.core.QuartzSchedulerThread -
				batch acquisition of 1 triggers



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值