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小时内删除。