您的位置:首页 > 编程语言 > Java开发

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

2014-06-03 19:25 411 查看
上一篇文章中介绍了,怎么用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}<
4000
/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@3f4
c1ff
24adc
六月 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: