springboot 整合Mybatis 实现对Oracle 的定时查询实例
本科毕业刚刚⼊职的第⼀个任务,就是统计⼀段时间内的数据并输出⾄⽂件。其实输出⾄⽂件并不是⼀个最优解,提供接⼝让负责统计的⼤数据⽅⾯去调⽤应该是更好的⽅法,也是更适合springboot的⽅法。但是公司每⽇都会有⼈处理Nginx⽇志并发送给⼤数据⽅⾯,所以按照Nginx的⽇志格式输出⾄⽂件进⾏统⼀处理显然是个省时省⼒的好办法。顺⼝说⼀句,⼤部分的公司安全完全依靠⽹络屏障,内部的安全措施是很不完善的,前段时间的数据泄露就是这个原因。下⾯开始正题,如有什么错误和问题欢迎⼤家留⾔,同时希望本篇⽂章对⼤家能有所帮助。
#准备阶段
⾸先新建⼀个maven项⽬,做成如图所⽰的结构
然后修改l,这⾥添加了热部署,log4j输出⽇志功能。<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="maven <modelVersion>4.0.0</modelVersion> <groupId>com.springboot</groupId> <artifactId>demo</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version> <!-- <version>0.0.1-SNAPSHOT</version> --> <parent > <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-parent </artifactId> <version> 1.3.0.RELEASE </version> </parent > <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &porting.outputEncoding>UTF-8</porting.outputEncoding> <java.version>1.7</java.version> </properties> <!-- 添加 web 应⽤的依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <grou
pId&batis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId&l.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.12</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> </dependency> <dependency> <groupId&acle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> --> </dependencies> <!-- 把项⽬打成jar 包运⾏ --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration>
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
然后我们就要配置application.properties,⼤家也可以使⽤l来配置,这⾥添加了关于⽇志输出的配置。spring.datasource.url=jdbc:oracle:thin:@ip 地址:sid spring.datasource.username=⽤户名 spring.datasource.password=⽤户密码
spring.datasource.driverClassName=oracle.jdbc.OracleDriver spring.jpa.database=pe-aliases-package=com.domain mybatis.mapper-locations=classpath*:mapper/*l =INFO springframework.web=INFO logging.file=⽇志⽂件的具体位置
sole=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
oracle数据库和mysql数据库配置的最⼤区别就是url了,oracle数据库的url稍微有⼀些繁琐,初学者很容易出错。不过现在使⽤oracle的越来越少了,我们公司也在做去O,后⾯我会再补充⼀篇Mysql的博客。还有⼀点,就是"mybatis.mapper-
locations=classpath*:l"这⼀条语句,是⼀个⼤坑。在我参考的⼀篇博客⾥这⼀句是这样的:"mybatis.mapper-locations=classpath :mapper/.xml"。在我看来这两句话是没区别的,".xml"难道不包括"*l"么?当我们只有⼀个mapper⽂件的时候⼆者是等同的,但是当我
们想多加⼏个mapper时(⽐如我们想同时在这个程序⾥分别查询多个表的数据)问题就来了,程序会抛出异常,这个异常很好理解,我们传⼊controller的⼀个List为空,我当时在这⾥就卡住了很久。我怀疑配置⽂件出了问题,但是我确实看不出来是这⾥的问题,直到我在⽹上看到的另⼀个demo⾥配置⽂件写的是"*l"。结果是让我很震惊的,确实是这⾥出现的问题。#正式开发
接下来就要开始正式开发了,我虽然新建了⼀个web项⽬,但是我没有指定接⼝,我只是在程序初期⽤浏览器去看程序的报错。⼤家有兴趣的话可以在本⽂程序的基础是上写⼏个接⼝来传输数据。
⾸先来写Data类,我们从数据库获取的数据就是Data类型,包含三个数据的get和set⽅法。如果我们要做接⼝的话,就可以把这个类的某个对象传⼊接⼝,springboot会帮我们把它格式化为json格式。
然后肯定要配置UserMapper⽂件了。
`<?xml version="1.0" encoding="UTF-8"?>
这⾥写查询所⽤的sql语句。⽐如我要⽤⽇期做变量,就把原来sql语句中的⽇期替换为#{date}即可。 `配置好就可以去写QueryMapper接⼝了。
</configuration> </plugin> </plugins> </build></project>
96
97
98
99
100package com.domain;public class Data { private String a; private String b; private String c; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21springboot aop
22
23
24
25
26
controller的代码package com.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;i
mport org.springframework.stereotype.Repository;import com.domain.Data;@Mapper @Repository public interface QueryMapper { List<Data> getData(String date); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ller;import java.io.File;import java.io.FileWriter;import java.io.IOException;SimpleDateFormat;import java.util.Date;import java.util.List;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.web.bind.annotation.RestController;import com.dao.QueryMapper;import com.domain.Data;@RestController public class QueryController { private final Logger logger = Logger(QueryController.class); // 依赖注⼊ @Autowired private QueryMapper queryMapper; @Scheduled(cron = "0 0/1 * * * *") //定时任务,1分钟1次 public void Data() throws IO
Exception { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String date = df.format(new Date()); logger.info("开始打印"+date+"数据"); List<Data> list = Data(date); if(list.equals(null)){ ("获取Data 为空"); } else{ logger.info("获取Data 成功"); } int a = 0;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
application的代码 int b = 0; int c = 0; int d = 0; for(int i=0;i<list.size();i++){ a = Integer.parseInt(((i)).getA()); b = b + Integer.parseInt(((i)).getB()) * a; c = c + Integer.parseInt(((i)).getC()) * a; d = d + a; } logger.info(a+"-"+b+"-"+c+"-"+d); //输出⾄⽂件 String[] result = new String[4]; result[0] = "a:"+a; result[1] = "b:"+b; result[2] = "c:"+c; result[3] = "d:"+d; File f = new File("D:/Demo."+date+".txt"); FileWriter out = new FileWriter(f); for(int i=0;i<4;i++){ out.write(result[i] + "\r\n"); } out.close(); logger.info(date + "数据打印结束"); }}
46
47
48
49
50
51
52
53
54
55
56
57
58
5960
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76package com;import java.io.FileNotFoundException;batis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.t.properties.ConfigurationProperties;import org.springframework.scheduling.annotation.EnableScheduling;import ansaction.annotation.EnableTransactionManagement;@SpringBootApplication @EnableTransactionManagement// 启动@EnableScheduling//定时任务@ConfigurationProperties(prefix="spring.datasource") @MapperScan("com.dao")public class Applic
ation { public static void main(String[] args) throws FileNotFoundException { SpringApplication.run(Application.class, args); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论