最近在写一个案例,定时任务对数据库进行更新操作,废话不多说,上代码:
1 @Component("taskJob") 2 public class TaskJob extends HibernateDaoSupport { 3 4 @Resource 5 private SessionFactory sessionFactory; 6 7 @PostConstruct 8 public void init() { 9 setSessionFactory(sessionFactory); 10 } 11 12 @Scheduled(cron = "0 0/1 * * * ?") 13 @Transactional 14 public void jobl() throws InterruptedException { 15 System.out.println("任务开始执行...."); 16 this.getHibernateTemplate().execute(new HibernateCallback() { 17 18 public Object doInHibernate(Session session) 19 throws HibernateException { 20 session.createSQLQuery("truncate table tm_org").executeUpdate(); 21 return null; 22 } 23 }); 24 System.out.println("删除完毕........"); 25 Thread.sleep(1000); 26 final File file = new File("C:\\Users\\lhq\\Desktop\\T1018.txt"); 27 BufferedReader reader = null; 28 try { 29 System.out.println("以行为单位读取文件内容,一次读一整行:"); 30 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); 31 String tempString = null; 32 // 一次读入一行,直到读入null为文件结束 33 while ((tempString = reader.readLine()) != null) { 34 final String[] split = tempString.split("\\s+"); 35 Org org = new Org(); 36 org.setOrgCode(split[0]); 37 org.setOrgName(split[1]); 38 // org.setStatus("0"); 39 if (split.length>3) { 40 org.setUpOrg(split[3]); 41 } 42 org.setCreator("superuser"); 43 this.getHibernateTemplate().persist(org); 44 45 } 46 reader.close(); 47 48 } catch (final IOException e) { 49 e.printStackTrace(); 50 } finally { 51 if (reader != null) { 52 try { 53 reader.close(); 54 } catch (final IOException e) { 55 } 56 } 57 } 58 } 59 }
最开始执行完操作的时候,这一行是没有的,因为我在数据库中设置了默认值,
控制台上就给我报错,如图:
为了程序的运行,我把这行手动添加上了,今天仔细一想,应该有办法解决这个问题,就上网找了N多个文字,都没有具体找到实现方法,大多都是配置文件形式的(这年头谁还用配置文件,都用注解了),后来千辛万苦找到一个解决方案,如图:
于是我就照葫芦画瓢,也这么写,然后发现是这样的:
一看就知道是过时的方法,为了程序的执行没有管他,run起来也没有问题,之后我又看了一下源码发现4.1版本的时候移除了:
然后我发现这里面每个字段上有这么一句:
意思就是用{}里面的替换了,于是就改成了这样:
当然也是没问题。
就是跟大家分享一下经验,帮助需要的人提供方案.
时间: 2024-10-10 21:34:31