无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(六)

添加/更新模块

项目目录结构

目录结构

1、新建maven工程:

Group Id:org.apache.maven.archetypes
Artifact Id:maven-archetype-quickstart
Version:1.1

2、引入依赖:
pom.xml:

<groupId>pers.zhentao</groupId>
    <artifactId>AddRecord</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>AddRecord</name>
    <url>http://maven.apache.org</url>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <forceJavacCompilerUse>true</forceJavacCompilerUse>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-core</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>

3、lambda函数输入DTO
Record.java

/**
 * 通讯录实体类
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-30
 */
public class Record {
    private Integer addressBookId;
    private String name;
    private String phoneNumber;
    private String address;
    private String telephoneNumber;
    private String note;
    private Date createTime;
    private Integer createdBy;

    //getters and setters...
}

4、lambda函数输出DTO
ResponseData.java

/**
 * 返回消息
 *
 * @author zhangzhentao1995@163.com 
 *         2017-10-30
 */
public class ResponseData {
    public static final Integer RESPONSE_CODE_SUCCESS = 1000;
    public static final Integer RESPONSE_CODE_ERROR = 1001;
    public static final Integer RESPONSE_CODE_SYS_EXCEPTION = 1002;

    private Integer code;
    private String message;
    private List<Record> rows;
    private Map<Object, Object> map;

    public ResponseData(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public ResponseData(Integer code, List<Record> rows) {
        this.rows = rows;
        this.code = code;
    }

    //getters and setters...
}

5、lambda处理程序
LambdaFunctionHandler.java

/**
 * Lambda处理程序
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-30
 */
public class LambdaFunctionHandler implements RequestHandler<Record, ResponseData> {

    public ResponseData handleRequest(Record input, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("[" + new Date() + "]input:" + JSONObject.toJSONString(input));
        try {
            IAddRecordService service = new AddRecordServiceImpl();
            service.addRecord(input,context);
            return new ResponseData(ResponseData.RESPONSE_CODE_SUCCESS, "add success");
        } catch (AddRecordException e) {
            logger.log("[" + new Date() + "]exception:" + e.getMsg());
            return new ResponseData(ResponseData.RESPONSE_CODE_ERROR, "add failed.");
        }
    }
}

6、service接口
IAddRecordService.java

/**
 * 添加记录接口
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-30
 */
public interface IAddRecordService {
    /**
     * 添加记录
     * @param record
     * @exception AddRecordException
     */
    public void addRecord(Record record, Context context) throws AddRecordException;
}

7、接口实现类
AddRecordServiceImpl.java

public class AddRecordServiceImpl implements IAddRecordService {
    /**
     * RDS数据库配置信息
     */
    private final String driver = "com.mysql.cj.jdbc.Driver";
    private String url = null;
    private String username = null;
    private String password = null;
    private final String INSERT_SQL = "insert into address_book (name,phone_number,address,telephone_number,note,created_by) value (?,?,?,?,?,?)";
    private final String UPDATE_SQL = "update address_book set name=?,phone_number=?,address=?,telephone_number=?,note=? where address_book_id=?";

    @Override
    public void addRecord(Record record, Context context) throws AddRecordException {
        url = System.getenv("DB_URL");
        username = System.getenv("USERNAME");
        password = System.getenv("PASSWORD");
        if(url == null || username == null || password == null) {
            throw new AddRecordException(AddRecordException.SYS_ERROR_CODE, "db config is null.");
        }
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new AddRecordException(AddRecordException.SYS_ERROR_CODE, "mysql driver not found.");
        }
        Connection conn;
        try {
            conn = DriverManager.getConnection(url, username, password);
            PreparedStatement statement;
            if (record.getAddressBookId() == null) {
                statement = conn.prepareStatement(INSERT_SQL);
                if (record.getCreatedBy() != null) {
                    statement.setInt(6, record.getCreatedBy());
                } else {
                    statement.setInt(6, -1);
                }
            } else {
                statement = conn.prepareStatement(UPDATE_SQL);
                statement.setInt(6, record.getAddressBookId());
            }
            statement.setString(1, record.getName());
            statement.setString(2, record.getPhoneNumber());
            statement.setString(3, record.getAddress());
            statement.setString(4, record.getTelephoneNumber());
            statement.setString(5, record.getNote());
            int count = statement.executeUpdate();
            conn.close();
            if (count != 1) {
                throw new AddRecordException(AddRecordException.DB_ERROR_CODE, "insert/update record faile.");
            }
        } catch (SQLException e) {
            throw new AddRecordException(AddRecordException.DB_ERROR_CODE, e.getMessage());
        }

    }

}

8、异常类

/**
 * 添加异常类
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-30
 */
public class AddRecordException extends Exception {

    private static final long serialVersionUID = -7268991732813176830L;

    public static final Integer INFO_ERROR_CODE = 1001;
    public static final Integer SYS_ERROR_CODE = 2001;
    public static final Integer DB_ERROR_CODE = 2002;

    private Integer code;
    private String msg;

    public AddRecordException(String message) {
        super(message);
    }

    public AddRecordException(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

9、maven打包
在项目根目录下,打开命令行,执行命令:

mvn package

执行完成后,项目target文件夹下会出现jar包:XXXX-0.0.1-SNAPSHOT.jar
10、创建Lambda函数,配置处理程序路径,配置环境变量,上传jar包
环境变量
11、配置测试事件,测试事件1为插入操作(未传入主键),测试事件2为更新操作(传入主键)。

——测试事件1:

测试事件1

——测试结果1:

测试结果1

——测试事件2:

测试事件2
——测试结果2:
测试结果2


至此,添加/更新模块完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值