SpringBoot MyBatis 整合(打成Jar在Azkaban上运行)

需求实现:SpringBoot 整合 MyBatis,从数据库获取数据转换为json,模拟post 请求推送数据到其他服务

1.创建表

数据库使用MySQL
建表语句:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据:

INSERT INTO `student` VALUES ('1', '张三', '18', '1', '北京市朝阳区');
INSERT INTO `student` VALUES ('2', '王五', '20', '1', '天津市南开区');
INSERT INTO `student` VALUES ('3', '李丽', '22', '0', '上海市虹桥区');

2.创建项目

这里写图片描述
Next,选择SQL,选择MyBatis即可
这里写图片描述
Next,Finish即可
这里写图片描述

3.配置 pom.xml

数据库使用MySQL,数据源使用druid,json操作使用jackson,在pom.xml中配置即可,后面我们要讲项目打包成jar,上传到azkaban运行,所以pom.xml中需要配置maven的插件,完整的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.harvey</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot-mybatis</name>
    <description>springboot mybatis demo</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.4</version>
        </dependency>
    </dependencies>

    <!--<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>-->
    <build>
        <finalName>springboot-mybatis-demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.harvey.SpringbootMybatisApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

配置 application.properties

mybatis.typeAliasesPackage=com.harvey.domain
mybatis.mapperLocations=classpath:mapper/*.xml

# DataSouce
spring.datasource.url=jdbc:mysql://192.168.191.65:3306/springbootdemo?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-wait=10000
spring.datasource.min-idle=2
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.maxActive=10
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=18800
spring.datasource.filters=stat

日志配置,使用logback

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="false" scanPeriod="1 minutes">
    <property name="APP_NAME" value="tradeareadatapush-job"/>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender" >
        <encoder>
            <pattern>%d{yyyy-MM-dd.HH:mm:ss.SSS} %t %p %c{0} %X{traceId} : %m%n</pattern>
        </encoder>
    </appender>

    <root level="INFO" >
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

6.项目结构

这里写图片描述
注意:banner.txt 是项目启动时加载,默认是springboot,笔者从网上自己生成了一个,自定义banner访问这个就可以,字符画生成:
http://patorjk.com/software/taag/#p=display&f=Henry%203D&t=CC11001100%0A

7.实体类:student.java

package com.harvey.domain;

public class Student {
    private int id;
    private String name;
    private int age;
    private int sex;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", address='" + address + '\'' +
                '}';
    }
}

8.mapper.xml 及接口

package com.harvey.dao;

import com.harvey.domain.Student;

import java.util.List;

public interface StudentDao {

    List<Student> listStudentInfo();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.harvey.dao.StudentDao" >
    <select id="listStudentInfo" resultType="com.harvey.domain.Student">
        SELECT
            id,
            `name`,
            age,
            sex,
            address
        FROM
            student
    </select>
</mapper>

9.Service 代码

package com.harvey.service;

public interface IStudentService {

    void datapush();

}
package com.harvey.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.harvey.dao.StudentDao;
import com.harvey.domain.Student;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentServiceImpl implements IStudentService {

    private static Logger logger = LoggerFactory.getLogger(StudentServiceImpl.class);

    @Autowired
    private StudentDao studentDao; // 这里会报错,忽略即可,不会影响程序正常运行

    // 业务处理
    @Override
    public void datapush() {
        logger.info("--------------------学生信息数据推送任务开始执行----------");
        List<Student> students = studentDao.listStudentInfo();
        ObjectMapper objectMapper = new ObjectMapper();
        String result = null;
        try {
            result = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(students);
            logger.info("学生信息数据:\n" + result);
        } catch (JsonProcessingException e) {
            logger.error("数据转换异常[List to Json]", e);
        }

        // 模拟http post 推送数据到其它数据服务
        try {
            Thread.sleep(1000);
            logger.info("数据推送成功!");
        } catch (InterruptedException e) {
            logger.error("服务异常!", e);
        }
    }
}

10.运行测试

项目创建后,会在创建项目Group中填写的内容对应的包下生成一个类,就是项目得启动入口类,默认代码如下
这里写图片描述
我们需要做一些修改,如下
这里写图片描述
这样做的目的是既可以直接运行测试,之后我们打包jar的时候,该类就是我的项目启动入口类(main方法入口类)

启动运行,查看控制台,部分截图
这里写图片描述

11.打成jar,上传到Azkaban运行

具体Azkaban的使用,笔者不做介绍,可以参考笔者博客:https://blog.csdn.net/hg_harvey/article/details/80521562

编写脚本studentinfodatapush.sh(注意要赋可执行权限),内容如下

#!/bin/bash
# Author:harvey
# FileName:studentinfodatapush.sh
export JAVA_HOME=/home/hadoop/software/jdk
export PATH=$JAVA_HOME/bin:$PATH

start_time=`date +%s`
java -jar /home/hadoop/jar/springboot-mybatis-demo.jar
end_time=`date +%s`

elapse_time=$((${end_time}-${start_time}))
echo -e "\n exec jar takes ${elapse_time} seconds\n"

创建job,然后打包上传到azkaban,studatapush.job内容如下

# studatapush.job
type = command
command = sh /home/hadoop/shell/studatapush.sh

azkaban运行,部分日志截图
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/HG_Harvey/article/details/80591523
今日推荐