在java timer定时器中调用dao层会报错

现在在做一个web项目,使用spring+springMVC+hibernate框架,

问题描述:
项目中有一个扫描的功能,分即时任务、定时任务、周期任务三种,即时任务已经实现了,现在使用java.util.Timer、java.util.TimerTask类做定时任务,重写TimerTask的run方法,在run方法中调用之前已经没有问题的即时任务扫描方法。每次运行定时任务时,会卡在dao层方法的调用上,因为在即时任务的扫描方法中调用了dao层的数据操作方法,报错“No Session found for current thread”。

即时任务的执行流程:前台提交即时任务扫描请求->控制器调用service层的立即扫描方法startImmediateTask();
定时任务的执行流程:前台提交定时任务扫描请求->控制器调用service层的定时扫描方法startTimerTask()->调用立即扫描方法startImmediateTask()。

下面附上代码和配置文件,请各位大牛帮忙解决啊!

service层代码

 /**
     * 开始定时扫描任务
     * @param blTask
     */
public void startTimerTask(final BLTask blTask) {
        Date startDate = blTask.getStartTime();
        TimerTask task = new TimerTask() {

            @Override
            public void run() {
            // 调用扫描方法
                startImmediateTask(blTask);
            }
        };
        Timer timer = new Timer();
        timer.schedule(task, startDate);        
    }


/**
     * 开始即时扫描任务
     * @param blTask
     */
 public void startImmediateTask(BLTask blTask) {

        BLScanParam blScanParam = new BLScanParam();
        BLPolicyGroup blPolicyGroup = null; // 策略组
        List<BLCheckItem> blCheckItems = null; // 检查项
        Map<Long, BLCheckScript> blCheckScriptMap = new HashMap<Long, BLCheckScript>(); // 检查脚本

        Long pgId = null; // 策略组ID
        String alias = null; // 策略别名、检查项别名
        Long osType = blTask.getOsType(); // 操作系统类型
        List<Long> csIds = new ArrayList<Long>(); // 检查脚本ID数组

        blScanParam.setBlTask(blTask);

        pgId = blTask.getPgId();
        // 通过策略组ID查找策略组
        blPolicyGroup = blPolicyGroupDao.get(pgId);

        if (blPolicyGroup == null) {
            return;
        }
        blScanParam.setBlPolicyGroup(blPolicyGroup);
        alias = blPolicyGroup.getAlias();

        // 通过别名、操作系统类别查找所有匹配的检查项
        blCheckItems = blCheckItemDao.queryByProerties(new String[]{"alias", "osType"}, new Object[]{alias, osType});

        if (blCheckItems == null || blCheckItems.size() <= 0) {
            return;
        }
        blScanParam.setBlCheckItems(blCheckItems);

        for (BLCheckItem blCheckItem : blCheckItems) {
            csIds.add(blCheckItem.getCsId());
        }
        int size = csIds.size();

        // 获取当前策略组下的所有检查项的检测脚本
        List<BLCheckScript> blCheckScripts = blCheckScriptDao.queryByProerties("csId", (Long[])csIds.toArray(new Long[size]));

        for (BLCheckScript blCheckScript : blCheckScripts) {
            // 获取当前策略组下的所有检测脚本,并放入map中
            blCheckScriptMap.put(blCheckScript.getCsId(), blCheckScript);
        }

        blScanParam.setBlCheckScriptMap(blCheckScriptMap);

        // 分割ip为数组,传入TaskDispatch
        String[] ips = getIps(blTask.getIpArea());
        TaskDispatch taskDispatch = new TaskDispatch(ips, blScanParam);
        taskDispatch.StartTask();

        // 将当前TaskDispatch对象的引用放入taskDispatchMap中,供停止任务时使用
        taskDispatchMap.put(blTask.getTkId(), taskDispatch);
    }

BaseDao的部分代码

public class BaseDao<E> implements Dao<E> {
 public SessionFactory getSessionFactory() {
        return this.sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Session getSession() {
        return this.sessionFactory.getCurrentSession();
    }

    @Resource(name = "sessionFactory")
    public void setSF(SessionFactory sessionFactory) {
        setSessionFactory(sessionFactory);
    }
}

applicationContext.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <context:annotation-config />
    <context:component-scan base-package="com.djbh" />

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql://192.168.1.247:3306/djbh_db?useUnicode=true&amp;characterEncoding=utf-8" />
        <property name="user" value="root" />
        <property name="password" value="mysql" />


        <!--
        <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;DatabaseName=DJBH_DB" />
        <property name="user" value="sa" />
        <property name="password" value="123456" />
        -->
        <property name="acquireIncrement" value="3" />
        <property name="idleConnectionTestPeriod" value="120" />
        <property name="initialPoolSize" value="3" />
        <property name="minPoolSize" value="3" />
        <property name="maxPoolSize" value="15" />
        <property name="numHelperThreads" value="3" />
        <property name="preferredTestQuery" value="select 1" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <!-- <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> -->
                <!-- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> -->
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.use_outer_join">true</prop>
                <prop key="hibernate.jdbc.fetch_size">30</prop>
                <prop key="hibernate.jdbc.batch_size">30</prop>
                <prop key="hibernate.jdbc.batch_versioned_data">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="javax.persistence.validation.mode">none</prop>
            </props>
        </property>
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
            <list>
                <value>com.djbh.model</value>
            </list>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- 启动对@AspectJ注解的支持 -->
    <aop:aspectj-autoproxy/>

</beans>

springmvc-servlet.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <mvc:annotation-driven/>

    <mvc:resources location="/static/" mapping="/static/**"/>
    <mvc:resources location="/attachment/report_html/" mapping="/attachment/report_html/**"/> 

    <context:component-scan base-package="com.djbh.controller" />

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> 
        <property name="prefix"><value>/WEB-INF/page/</value></property> 
        <property name="suffix"><value>.jsp</value></property>
    </bean>

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" />
        <property name="useCodeAsDefaultMessage" value="true" />
    </bean>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--<property name="maxUploadSize" value="10485760"></property> -->
    </bean> 

    <aop:aspectj-autoproxy proxy-target-class="true" />
</beans>


web.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <display-name>djbh</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:applicationContext*.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>core.web.SystemInitListener</listener-class>
    </listener>
    <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>core.web.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>openSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>characterEncoding</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>characterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>
0

1个回答

startTimerTask是什么时候调用的,贴出来的信息太少了

0
w172087242
w172087242 回复yanxin9210: 保持所有操作都是spring管理的才能保证ioc的完全注入,所以需要所有实现流程才知道,你也可以看看梳理你的流程。
3 年多之前 回复
yanxin9210
yanxin9210 前台发起定时任务扫描请求时,处理扫描请求的控制器就会调用startTimerTask
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java定时器全套(内含Spring框架普通类调用Service)
直接上代码nn nn1.定时器监听nnnimport javax.servlet.ServletContextEvent;nimport javax.servlet.ServletContextListener;nnpublic class ContextListener implements ServletContextListener {nn private java.util.Timer ...
在java项目中 dao实例和service实例在调用的时候报空指针异常
 如果再写一些工具类包括过滤器和监听器的时候,需要使用到dao或者service中的方法,这个时候如果按照平时那样获取系统会直接报空指针异常,提示找不到。原因就是在项目启动的时候这些工具类中的service或者dao还没有来得及注入。解决办法:传统ssh项目中,只需要单独写个方法,然后在使用的时候直接使用这个方法获取即可public IUtilService getService(){n IUt...
Timer定时器service为null的情况
最近在做定时器的时候,用到了Java的Timer,写完去跑程序的时候,运行以后发现实现类的service是null,这时候就开始考虑是不是因为项目启动以后注入没注入进去。 n上网上也看了很多的方法,尝试了一下感觉都不太靠谱。后来去搜项目启动如何配置注入service,发现了解决方法: n通过写一个applicationContext的配置类,然后在自己new实现类的地方get,就可以把bean进行注
java定时器无法自动注入的问题解析(原来Spring定时器可以这样注入service)
近些日子在做一个项目,在项目中需要用到spring的定时任务,但是在操作数据库的时候发现总是不能正确的进行数据的插入,经过查看才发现:是因为service层不能够通过普通的方法注入到action,所以这样就不能够执行service层,进而执行数据库的操作。 n解决方法:这时需要配置一个service注入的工具类,代码如下: n一、工具类nnnn public class Applicatio
spring中类继承TimerTask后 service 和dao 无法注入 以及参数无法传递
当调用一个定时器,但运行报错,空指针异常!也就是service、dao根本就没有注入成功、nn原因是:继承TimerTask后,会直接运行run()方法,还没来得及执行标记进行注入。nnnnn这个时候引入SpringContextUtil的工具类nnnnnn/** n * 项目名称: n * 类名: SpringContextUtiln * 描述: 获取bean的工具类,
java定时器无法自动注入的问题解析
最近公司在做对账单,要求定时自动执行,于是从网上查了各种定时器用法,最终没有一个是好用的,发现service层无法自动注入的原因导致,至于是什么原因导致无法注入,我还是不晓得,希望有这方面经验的同僚给出建议。rn我是将定时器的初始化放入到servlet中饭控制的,当然放入到监听器中也是可以的,看自己的喜好。rn为了获取到这个注入对象,只能我们手动注入了,就是通过获取上下文对象,然后再对这个对象进行
测试Spring定时任务时在Dao层报空指针异常
断点调试代码走到Dao后报空指针异常,在Dao层的代码比较简单就在方法里一句:nreturn this.findListBySqlId("findSqlByMap", paraMap);n然后把框架封装的代码提取出来npublic List findListBySqlId(String sqlId, Map paraMap)n    /*     */   {n    /* 195 */
原来Spring定时器可以这样注入service
近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍。1、定时器的配置(注意配图中beans里面,要有相关的引用)原来Spring定时器可以这样注入servicen----------------------------------------nxmlns:t
关于Timer定时器出现异常时,整个定时任务就中断了。
问题还是很简单,很基础的针对定时任务一定要try catch 而且最好在最外层再try catch Exception,这样某次的定时任务即使出现异常,也会自己消化掉,不会影响下一次的执行。错误就是由于没写下面红色部分:          public void run() {n         try {n n String postRequestJson = URLconnUtil.p...
java Timetask 访问service 抛空指针异常解决方案
java Timetask 访问service 抛空指针异常解决方案rn           错误原因: 创建自己的timetask 定时器继承了TimerTask之后,当执行run时还未进行service的注入。此时抛出空指针异常;以下为最终解决方案rn        // 自定义的TimerTaskrnrn         public class WXFocusTask extends Ti
java定时器Timer的使用
1、构造方法n①Timer timer = new Timer();n②定时器为守护进程nboolean flag=true;nTimer timer1 =new Timer(flag);nn③指定定时器的名字,方便指定停止 nString name="TimerName2";nTimer timer2 =new Timer(name);nn④指定定时器的名字,并指定为守护进程
自建工具类引用service层或dao层接口报空指针异常解决办法之一
问题描述:想要建一个工具类进行数据同步,其中要用到service层或dao层的数据查询接口,正常构建工具类,用@Autowired注解导入service层。在项目测试时报空指针异常,发现是service层接口注入失败。nn nn解决方法:将你的工具类变成spring容器:1.将你的工具类所在的包在springmvc文件中配置扫描路径,和controller层、service层、dao层一样就可以:...
tomcat启动timer定时器会执行两次问题解决方案
在网上找了一通,发现还是配置文件的问题,于是,在tomcat的server.xml中将appBase修改成空,问题得到解决rn rn            unpackWARs="true" autoDeploy="true">rn                rn                rn        rn             Documentation at: /docs/c
springmvc框架定时器功能实现和service注入问题解决
springmvc框架,利用监听器实现定时器功能,以及service注入问题解决
SpringMVC中类继承TimerTask后无法对service注入问题
接到一个需求,大致是当启动服务器时加载数据表的数据,存到后台的static缓存中。rn才开始在web.xml配置了rnrnrnrnn com.ewin.merTasknrnrnrn然后调用一个定时器,定时器中拿数据库中数据,但运行报错,空指针异常!也就是service根本就没有注入成功、rn原因是:继承TimerTask后,会直接运行run()方法,还没来得及执行标记进行注入rnrnrn1、引入A
关于Spring Mvc定时任务中无法获取Bean容器中的对象
定时器的类继承QuartzJobBean后,托管在Spring中的Bean无法被获取到,不管是实例化还是默认加载获得的对象都为空值,这时候需要手动获取ApplicationContext的上下文,才能取得被Spring保管的对象。public class QuartzTask extends QuartzJobBean {n private static final Logger log =...
Timer&TimerTask在主线程中调用导致程序无法终止
如题,明明在该结束Time陷阱的时候加了cancel(),但是还是不能结束,试了一下,可利用System.gc()//加在cancel()后面!!!!!
Java Web项目中定时器Timer的使用
在以前的文章中,曾经写过一个调度器Quartz的使用实例,今天,分享一个JDK自带的定时器Timer在Java Web项目中的使用。首先,简单说一下Quartz和Timer的相同和不同之处:相同:他们都是定时去执行一些操作,比如,定时删除一些过期数据,定时发送一些通知消息等等。 n区别:Quartz是一个开源的任务调度框架,需要进行配置和加入相应的依赖,而Timer是JDK自带的一个定时器,无需配置
两种方式实现java定时器,使用quartz定时器框架和java自带Timer定时器,编写定时任务
    开启定时任务的方式有几种:包括quartz定时框架和java自带Timer定时器,区别在于,quartz定时任务在程序报错后能不断执行,而在Timer定时任务中,程序一旦报错,定时任务即不再执行,可根据需求选用。    前两天工作需求,需要写个定时任务去跑一些数据,我首先选择的就是quartz定时器,不过后来因为环境问题而改用了Timer定时器,下面简单介绍一下两种定时器的书写。    1...
Java Web性能优化之一:减少DAO层的调用次数
关于java web中service多次调用dao层与数据库内部处理逻辑的性能对比
《多线程编程》学习之十:定时器Timer的使用,线程安全的单例模式
一、定时器Timer的使用n         定时器 Timer类主要的作用是设置计划任务,它在内部使用多线程的方式进行处理;而抽象的TimerTask类负责封装任务,它实现了Runnable接口。n1)schedule(TimerTask task,Date time)n          此方法表示,如果设定的时间早于当前时间,则立即执行;否则等待time指定的时间再执行task任务。
java中的Timer定时器
java 定时器在java.swing包中,可以使用它在到达给定时间间隔触发事件。rn添加TimePrinter类实现ActionListener接口:rnpackage com.Project_timer01;nnimport java.awt.Toolkit;nimport java.awt.event.ActionEvent;nimport java.awt.event.ActionList
为什么调用Dao层会报空指针异常
最近刚刚学SSM框架,然后在service调用Dao层是出现了空指针错误,检查了好久,看了好几遍的配置文件,发现配置文件没有错,然后发现在Service依赖注入Dao层的时候忘记加了@Autowired的注释,毕竟是注释查找,没有注释怎么找,所以报错。嘿嘿,作为初学者也该长长记性。nnnpublic class ItemsServiceImpl implements ItemsService{nn...
java定时器Timer 类的使用及Timer already cancelled问题解决
1. Timer和TimerTasknn  Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外另起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。nn  TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。nn2. 一个简单的Timer使用示例nnnpackage com.dswh.test;nimport java....
Timer定时器因修改系统时间导致挂起的原因
也许你在使用Timer的过程中很顺利,但有可能你也会发现Timer会无缘无故地挂起,不再重复地执行任务了
linux驱动中定时器的使用
&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp;在linux驱动中经常需要使用定时器,常见的使用为启动某项检查获取检测log等,此时会在proc/下增加相应的检测开关和时间域。如/proc/ctcwifi/diag_enable和/proc/ctcwifi/diag_duration,此时需支持diag_enable的读写,diag_duration的读写,当diag_enable写1时开始...
android定时器例子、timer、postDelayed等
需求 n项目要的功能是 点赞 不可以取消 只要点了就在图标上角+1 且在一定时间后自动消失!考虑到简单直接用 n Handler的postDelayed()方法! n推荐HandlernnHandler handler = new Handler();nhandler.postDelayed(new Runnable() { n @Overriden publi...
【Java多线程】——定时器Timer的使用
    在JDK中Timer类主要用于负责计划任务,也就是说在某个时间点开始执行一个计划好的任务。    Timer类中的方法列表如下:    serialNumber()    Timer():默认构造方法;    Timer(boolean):参数表示thread是否为守护线程    Timer(String):参数为线程名    Timer(String, boolean)    sched...
在Servlet中调用Dao层读取文件信息的方法时报错
n n n 报错情况如下:nnnnnn11.pngnn这是我54行前后的部分代码:nnnnnnn22.pngnn在53行的位置我有个读取磁盘文件的操作,问题就出现在这里:nnnnnnn33.pngnn这里的文件我用的是相对路径,在Dao层里测试是没有问题的,但是到了Servlet里就抱空指针错误了,这种情况的解决办法是:读入的文件用上绝对路径,如这种格式:nFile ...
java Timer(定时调用、实现固定时间执行)测试
java Timer(定时调用、实现固定时间执行)测试nnnn测试1,当任务执行时间小于重复执行的间隔时间nn代码:nnpublic class TimerTest2 {n public static void main(String[] args) throws InterruptedException {n Timer timer = new Timer();
spring quartz定时器调用service层事务失效原因
项目中集成了activiti配置文件遇到一个很诡异的问题,通过url方式调用controller,service层事务正常,但是spring quartz定时器调用service层时事务失效,经过反复测试原因是:在activiti配置文件中又重复配置了transactionManager导致这个问题,解决办法去掉activit-content.xml配置文件中的transactionManager...
springboot+Mybatis定时任务 如何调用Mapper层。
今天在工作中遇到一个问题,在项目中的定时任务调用Mapper层的代码,出现空指针异常。最后在百度和请教前辈的基础上,解决了该问题,接下来做个总结:nn首页要添加一个Spring的工具类代码如下:nnpublic class SpringContextHolder implements ApplicationContextAware {nn private static Application...
定时器timer和mutex锁所导致的问题
背景:    项目需要,需要将背光的控制由MPU侧移到MCU侧,通过串口协议发指令给MCU来控制背光,并且添加周期帧,2秒一次发送背光指令给MCU。遇到的问题:        在定时器的处理函数中使用mutex锁导致,概率行卡死,死机,log如文章最下面附件1,代码大体如附件2:问题分析:    由于定时器是不可休眠的软中断,而mutex锁属于可休眠的锁,所以会出问题关键问题定位:BUG: sch...
SSH 中spring配置文件DAO层配置出错
Failed to convert property value of type [$Proxy13] to required type [com.llm.dao.UserDAOImpl]\; 找不到问题代码了,因为已经解决了。。。大概就是因为自己写的DAO层的文件名是UserDAO而不是UserDao,所以在spring配置文件applicationContext.xml中会对UserDAO进行...
解决timer 定时器,定时器越来越快的问题
当我们用timer + hander 去实现定时器的时候,有时候会出现时间越来越快的这种情况,网上搜了很多资源,好像并没有实际上解决我的问题。我做的是一个输入银联密码的对话框,每个有15秒的超时时间,nn刚开始我是这样写好的    nnnn这样写如果说时间到了  对话框消失这样是没有问题的,就是说如果密码输入错误,对话框不会消失,timer就会一直在计时nn下次进来又会new 一个timer   ...
在JavaWeb项目中的普通Util类调用dao层的方法
只需要加上这几行就行nnn static String paths[] = {&quot;spring/applicationContext.xml&quot;};n n static ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);n n static BookService bookService = ctx.get...
java中Timer定时器的使用和启动
一.概述nn定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,但封装任务的类却是TimerTask类。nn二.应用场景nn我们使用timer的时候,一般有4种情况:n1.指定时间执行;n2.指定时间执行后间隔指定时间重复执行;n3.启...
main方法中调用daoimp实现类
n ApplicationContext appContext = new ClassPathXmlApplicationContext(&quot;applicationContext.xml&quot;);rn QueryDaoImpl remoteHandler = (QueryDaoImpl) appContext.getBean(&quot;userDao&quot;);rn BlackList bl = new Blac...
dao层不写实现类容易出现的错误及解决方法
这次碰到这个问题费了一番功夫,就想记下来,为以后提个醒,也希望大家能够看后少走弯路。rn        我配置的是spring+springMVC+mybatis框架,开始也是借鉴别人的代码,看到人家dao层不用写实现类就能直接映射mapper里的方法,我也想试试,可是一直报错,org.springframework.beans.factory.UnsatisfiedDependencyExcep
Java:关于Service与Dao的调用问题
 nn        在之前我们开发的代码中,关于在Service中是调是用Dao还是其它Service的问题,都显得比较随意(我自己也是这样),其实在这样是不对的。n        讲道理的话,Service A不应直接调用B的Dao层,而是应该调用B的Service层业务实现,因为B的Service是对其Dao的CRUD封装,在多库且有缓存的情况下,可能存在跨库操作,直接调用B的Dao显然是不...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 dao学习 java 学习java会忘