你需要先学习mybatis知识,建议看一下轻量级java web(ssm)这本书,讲得很详细,
掌握mybatis之后,访问数据库就非常方便了,不管你是否打成jar包,访问数据库都是一样的。
quartz定时任务配置:<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
</list>
</property>
</bean>
其中:
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
配置对应的定时任务,可配置多个,名称要唯一,对应的是第二步中配置的CronTriggerFactoryBean
CronTriggerFactoryBean配置,由于要实现动态读取定时任务周期时间,所以我们要写一个类实现CronTriggerFactoryBean,类的内容如下:
public class InitCronTriggerFactoryBean extends CronTriggerFactoryBean implements Serializable {
private static final long serialVersionUID = 1L
private SysParamServiceImpl sysParamServiceImpl
private String key
public void setKey(String key)
{
this.key = key
}
public void setSysParamServiceImpl(SysParamServiceImpl sysParamServiceImpl)
{
this.sysParamServiceImpl = sysParamServiceImpl
setCronExpression(getCronExpressionFromDB())
}
private String getCronExpressionFromDB()
{
if(StringUtils.isEmpty(key))
return "0 0 0/1 * * ?"
SysParam sysParam = new SysParam()
try
{
sysParam = sysParamServiceImpl.getNameByKey(key)
}
catch (Exception e)
{
e.printStackTrace()
}
if(sysParam != null &&!StringUtils.isEmpty(sysParam.getParamValue()))
return sysParam.getParamValue()
return "0 0 0/1 * * ?"
}
}
简单说明一下:key是用来查询数据库配置的CronExpression表达式的查询条件,SysParamServiceImpl 是实现查询的类,这几个参数都要从spring配置的CronTriggerFactoryBean参数获取,注意,配置的时候,key值的配置要在SysParamServiceImpl 的配置之前,否则报空指针
spring配置CronTriggerFactoryBean:
实现了CronTriggerFactoryBean之后,开始配置CronTriggerFactoryBean,现在配置的是InitCronTriggerFactoryBean :
<bean id="InquiryCronTrigger" class="cn.com.shopec.quartz.utils.InitCronTriggerFactoryBean">
<property name="jobDetail" ref="InquiryJobDetail" />
<property name="key" value="inquiryQuartzParam" />
<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />
</bean>
id对应quartz定时任务配置的<ref bean="InquiryCronTrigger"/>,参数有三个,第二个和第三个是InitCronTriggerFactoryBean设置内容需要的,第一个<property name="jobDetail" ref="InquiryJobDetail" />则是定时任务执行业务逻辑的类
ps:<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />,这个要配置对应的bean,我的是
<bean id="sysParamServiceImpl" class="cn.com.shopec.core.system.service.impl.SysParamServiceImpl">
</bean>
配置对应的定时任务执行业务方法的类:
<bean id="InquiryJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="durability" value="true" />
<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />
<property name="jobDataAsMap">
<map>
<entry key ="inquiryServiceImpl" value-ref="inquiryServiceImpl"/>
</map>
</property>
</bean>
简单说明一下:<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />配置的是你需要定时执行的类,<property name="jobDataAsMap">下面配置的是定时执行类中需要用到的其他类,这是由于项目启动执行定时任务不能在定时任务类中实例化这些类,要配置才行。
对应的定时任务执行类:
public class InquiryQuartz extends QuartzJobBean {
@Autowired
private InquiryServiceImpl inquiryServiceImpl
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException
{
// 实例化接口
inquiryServiceImpl = (InquiryServiceImpl) arg0.getJobDetail().getJobDataMap().get("inquiryServiceImpl")
// 执行业务方法
quartzStart()
}
public void quartzStart(){
// 业务方法...
}
}
说明一下:必须要实现QuartzJobBean 接口
至此,就可以完成可配置CronExpression表达式的定时任务了!1
Spring是 分层 的JavaSE/EE ( 一站式 ) 轻量级 开源的 容器框架 ,以 IOC (Inverse of Control 控制反转:对象之间的关系由容器创建,降低了程序之间的依赖性)和 AOP (Aspect Oriented Programming 面向切面编程)为内核的容器框架
一站式、分层:
JavaEE的有三层结构:web层、业务层、数据访问层(持久层,集成层),而Spring框架有对三层的每层解决方案:
web层:Spring MVC
持久层:JDBC Template (applicationContext.xml)
业务层:Spring的Bean管理(Bean:是spring根据用户提供相应的需求创建的对象,由IOC管理)(service)
spring官网:https://spring.io/
Spring的英文翻译为春天,可以说是给Java程序员带来了春天,因为它 极大地简化了开发,有效的解决了当时软件开发比较复杂的问题 (当时采用EJB开发JAVA EE应用,但EJB存在着学习成本太高,开发效率比较低,资源消耗很高的问题)。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。
Spring的优秀之处:
1、最完善的轻量级核心框架。
2、简化了开发,方便解耦
4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps等优秀框架。
5、强大的AOP功能:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
6、 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
这是Spring框架最基础的部分,所有的Spring模块都是在核心容器之上构建的。它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IOC(控制反转)将应用配置和依赖说明从实际的应用代码中分离出来。
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持(Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息)。
另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。
Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。
使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!
另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。
对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。
UserService的接口
UserService的实现类
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)