无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(五)
2017-11-27 17:15
926 查看
查询模块
项目目录结构1、新建maven工程:
Group Id:org.apache.maven.archetypes Artifact Id:maven-archetype-quickstart Version:1.1
2、引入依赖:
pom.xml:
<groupId>pers.zhentao</groupId> <artifactId>QueryRecord</artifactId> <version>0.0.1-SNAPSHOT</version> <name>QueryRecord</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() + "]Query:" + JSONObject.toJSONString(input)); IQueryRecordService service = new QueryRecordServiceImpl(); try { List<Record> list = service.queryAll(); return new ResponseData(ResponseData.RESPONSE_CODE_SUCCESS,list); } catch (QueryRecordException e) { return new ResponseData(ResponseData.RESPONSE_CODE_SYS_EXCEPTION, e.getMsg()); } } }
6、查询service接口
IQueryRecordService.java
/** * 查询服务接口 * * @author zhangzhentao1995@163.com * 2017-10-30 */ public interface IQueryRecordService { /** * 查询全部 * @return */ public List<Record> queryAll() throws QueryRecordException; }
7、service实现类
QueryRecordServiceImpl.java
public class QueryRecordServiceImpl implements IQueryRecordService { /** * 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 QUERY_SQL = "select * from address_book"; @Override public List<Record> queryAll() throws QueryRecordException { url = System.getenv("DB_URL"); username = System.getenv("USERNAME"); password = System.getenv("PASSWORD"); if(url == null || username == null || password == null) { throw new QueryRecordException(QueryRecordException.SYS_ERROR_CODE, "db config is null."); } try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new QueryRecordException(QueryRecordException.SYS_ERROR_CODE, "mysql driver not found."); } Connection conn; try { conn = DriverManager.getConnection(url, username, password); PreparedStatement statement = conn.prepareStatement(QUERY_SQL); ResultSet result = statement.executeQuery(); List<Record> list = new ArrayList<>(); while (result.next()) { Record record = new Record(); record.setAddressBookId(result.getInt(1)); record.setName(result.getString(2)); record.setPhoneNumber(result.getString(3)); record.setAddress(result.getString(4)); record.setTelephoneNumber(result.getString(5)); record.setNote(result.getString(6)); record.setCreateTime(result.getDate(7)); record.setCreatedBy(result.getInt(8)); list.add(record); } conn.close(); return list; } catch (SQLException e) { throw new QueryRecordException(QueryRecordException.DB_ERROR_CODE, e.getMessage()); } } }
8、查询异常类
QueryRecordException.java
/** * 查询异常类 * * @author zhangzhentao1995@163.com * 2017-10-30 */ public class QueryRecordException extends Exception { private static final long serialVersionUID = -3483738766858412487L; 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 QueryRecordException(String message) { super(message); } public QueryRecordException(Integer code, String msg) { this.code = code; this.msg = msg; } //getters and setters... }
9、maven打包
在项目根目录下,打开命令行,执行命令:
mvn package
执行完成后,项目target文件夹下会出现jar包:XXXX-0.0.1-SNAPSHOT.jar
10、创建Lambda函数,配置处理程序路径,配置环境变量
11、配置测试事件,因为代码逻辑为查询全部,所以这里输入DTO传与不传都一样
12、测试结果
至此,查询模块完成
相关文章推荐
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(六)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(七)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(八)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(九)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(总结)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(一)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(二)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(三)
- 无服务器探索之路(初级):AWS Lambda服务应用场景实践之一(四)
- 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)
- 高并发应用场景下的负载均衡与故障转移实践,.NET SOA 中间件负载均衡服务介绍与实例
- DotNET企业架构应用实践 - 用服务定位器(SL)完成服务的多种实现的统一调用
- AWS 上 Java Lambda 应用记要
- Redis作为消息队列服务场景应用案例
- 高性能网关设备及服务实践(dpdk)--服务器架构研究
- SAE实践——创建新应用开启MySQL服务
- WEB 容器、WEB服务和应用服务器的区别与联系
- WEB 容器、WEB服务和应用服务器的区别与联系
- Redis作为消息队列服务场景应用案例
- 容器云最佳实践:Docker、微服务、应用容器化之Kubernetes实践