注册模块
项目目录结构
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,注册数据已入库
至此,注册模块完成。