无服务器探索之路(初级):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>Register</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Register</name>
    <url>http://maven.apache.org</url>
    <!-- 打包为jar包 -->
    <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>4.12</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
RegisterInfo.java

public class RegisterInfo {
    private String username;
    private String email;
    private String password;

    //getters and setters...
}

4、lambda函数输出DTO
RegisterResponse.java

public class RegisterResponse {
    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<Object> rows;
    private Map<Object, Object> map;

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

    //getters and setters...
}

5、lambda处理程序
LambdaFunctionHandler.java

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

    public RegisterResponse handleRequest(RegisterInfo input, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("[" + new Date() + "]RegisterInfo: " + JSONObject.toJSONString(input));
        if(!ValidateUtil.inputValidate(input)) {
            return new RegisterResponse(RegisterResponse.RESPONSE_CODE_ERROR,"register info error.");
        }
        IRegisterService registerService = new RegisterServiceImpl();
        try {
            registerService.register(input,context);
        } catch (RegisterException e) {
            return new RegisterResponse(RegisterResponse.RESPONSE_CODE_SYS_EXCEPTION,e.getMsg());
        }
        return new RegisterResponse(RegisterResponse.RESPONSE_CODE_SUCCESS,"register success.");
    }

}

6、注册service接口
IRegisterService.java

/**
 * 注册service接口
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-27
 */
public interface IRegisterService {
    /**
     * 注册
     * @param info 注册信息
     * @throws RegisterException
     */
    public void register(RegisterInfo info, Context context) throws RegisterException;
}

7、注册service实现类
RegisterServiceImpl.java

/**
 * 注册service实现类
 *
 * @author zhangzhentao1995@163.com
 *         2017-10-27
 */
public class RegisterServiceImpl implements IRegisterService{
    /**
     * 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 user_info (user_name,password,email) value (?,?,?)";

    public void register(RegisterInfo info, Context context) throws RegisterException {
        url = System.getenv("DB_URL");      //数据库配置从环境变量获取
        username = System.getenv("USERNAME");
        password = System.getenv("PASSWORD");
        if(url == null || username == null || password == null) {
            throw new RegisterException(RegisterException.REGISTER_SYS_ERROR_CODE, "db config is null.");
        }
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new RegisterException(RegisterException.REGISTER_SYS_ERROR_CODE,"mysql driver not found.");
        }
        Connection conn;
        try {
            conn = DriverManager.getConnection(url,username,password);
            PreparedStatement statement = conn.prepareStatement(INSERT_SQL);
            statement.setString(1, info.getUsername());
            statement.setString(2, info.getPassword());
            statement.setString(3, info.getEmail());
            int count = statement.executeUpdate();
            conn.close();
            if(count != 1) {
                throw new RegisterException(RegisterException.REGISTER_DB_ERROR_CODE,"insert record failed.");
            }
        }catch(SQLException e) {
            throw new RegisterException(RegisterException.REGISTER_DB_ERROR_CODE,e.getMessage());
        }
    }
}

8、注册异常类
RegisterException.java

/**
 * 注册异常类
 *
 * @author zhangzhentao1995@163.com 
 *         2017-10-27
 */
public class RegisterException extends Exception {

    private static final long serialVersionUID = 8365773790495521094L;

    public static final Integer REGISTER_INFO_ERROR_CODE = 1001;
    public static final Integer REGISTER_SYS_ERROR_CODE = 2001;
    public static final Integer REGISTER_DB_ERROR_CODE = 2002;

    private Integer code;
    private String msg;

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

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

    //getters and setters...
}

9、校验工具类
ValidateUtil.java

/**
 * 校验工具类
 *
 * @author zhangzhentao1995@163.com 
 *         2017-10-27
 */
public class ValidateUtil {
    /**
     * 校验注册信息
     * 
     * @param info 注册信息
     * @return 是否校验通过
     */
    public static Boolean inputValidate(RegisterInfo info) {
        if (info.getUsername() == null || info.getUsername().trim().equals("")) {
            return false;
        }
        if (info.getEmail()==null || info.getEmail().trim().equals("")) {
            return false;
        }
        //邮箱格式校验
        String regEx = "^[a-zA-Z0-9._-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        Pattern pattern = Pattern.compile(regEx);
        Matcher matcher = pattern.matcher(info.getEmail().trim());
        if (!matcher.matches()) {
            return false;
        }
        if (info.getPassword()==null || info.getPassword().trim().equals("")) {
            return false;
        }
        return true;
    }
}

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

mvn package

执行完成后,项目target文件夹下会出现jar包:XXXX-0.0.1-SNAPSHOT.jar
11、创建Lambda函数,配置处理程序路径,配置环境变量
环境变量
12、配置测试事件
测试事件
13、测试结果
测试结果
14、使用数据库连接工具查看RDS,注册数据已入库
这里写图片描述


至此,注册模块完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值