【技术方案分享】华为云OBS&RDS开发实战-java版(中篇)
【摘要】 本实践是一个前后端分离的项目,通过集成华为云OBS Java SDK 和华为云RDS数据库,实现用户中心个人图片上传、更新功能。获取源代码:gitee上获取(https://gitee.com/HuaweiCloudDeveloper/dtse-practice)
1 实验目的
- 使用IDEA、Vscode开发工具,基于springboot、VUE.js框架开发和测试单元编写
- 能够集成 OBS-Java-SDK 和 RDS for MySQL 进行业务开发
- 了解用户鉴权、用户信息查询以及用户数据更新等业务实现逻辑
2 项目实战要求
- 在华为云上创建OBS桶 和 RDS for MySQL 并初始化数据库
- IDEA工具导入Springboot项目,集成 OBS SDK 和数据库RDS开发环境
- 查看华为云官方SDK文档,实现“OBSservice”类中 uploadOneFile 和 deleOneFile 方法
- 能够编写junit测试类,实现接口数据测试
- 使用VScode工具加载前端代码,输入用户名密码后,查看profile 图片,并修改图片
3 实战项目介绍
本实践是一个前后端分离的项目,通过集成华为云OBS Java SDK 和华为云RDS数据库,实现用户中心个人图片上传、更新功能。
3.1 业务流程图
3.2 部署架构图
3.3 项目实战技术栈
本项目是一个前后端分离项目,涉及:
- 开发工具:后端开发工具 IntelliJ IDEA 、前端开发工具 VScode
- 开发技术栈:springboot 、vue.js 、jwt、mybatis-plus、OBS Java-SDK
- 应用部署技术栈:ECS、EIP 、 RDS(MySQL)、OBS、华为云CodeHub
- 运维技术栈:云日志服务 LTS
4 前置条件
- 已注册华为云账号,完成实名认证,同时账号不能处于欠费或冻结状态;
- 账户需有足够的余额或代金券;
- 工具安装:安装好IDEA以及VScode。
- 获取源代码:gitee上获取(https://gitee.com/HuaweiCloudDeveloper/dtse-practice)
5 后端代码调试
5.1 代码调试
pom.xml 配置OBS SDK、MySQL驱动等依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>obs-sdk</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId> //数据库依赖
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId> //mybatis
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.huaweicloud</groupId> //OBS SDK
<artifactId>esdk-obs-java-bundle</artifactId>
<version>[3.21.8,)</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>annotations</artifactId>
<version>3.0.1</version>
</dependency>
<!-- swagger -->
<!--dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
5.2 修改配置项
server:
port: 9090 #服务端口
spring:
application:
name: dtse-practice-demo
#数据库配置参数
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://IP(数据库绑定的公网IP):3306/dtse?useUnicode=true&characterEncoding=utf8 #数据库连接地址
username: root
password: ************** #数据库密码
jpa:
open-in-view: off
security:
oauth2:
resourceserver:
jwt:
issuer-uri:
logging:
level:
root: info
com.huaweicloud: debug
jwt:
config:
ttl: 360000
##OBS 配置信息
obs:
config:
bucketname: ***** ##OBS桶名称
#objectname: dtsetraining/Dtest
endPoint: https://obs.cn-north-4.myhuaweicloud.com ##访问桶,概述页面获取
ak: **** ##访问秘钥AK
sk: **** ##访问秘钥SK
实现OBSService类的 uploadOneFile 和 deleteOneFile 方法
package com.huaweicloud.dtse.service;
import com.huaweicloud.cnmons.config.OBSParams;
import com.huaweicloud.cnmons.response.Result;
import com.huaweicloud.cnmons.response.ResultCode;
import com.huaweicloud.dtse.service.impl.IOBSService;
import com.obs.services.ObsClient;
import com.obs.services.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
/**
* OBS service接口
*/
@Service
public class OBSService implements IOBSService {
@Autowired
OBSParams obsParams;
/**
* @param inputStream 上传至OBS数据流参数
* @return 返回存入OBS请求参数
*/
@Override
public String uploadOneFile(InputStream inputStream) {
//1、从obsParams中获取OBS 访问配置参数
String endPoint = obsParams.getEndPoint();
String ak = obsParams.getAk();
String sk = obsParams.getSk();
String bucketname = obsParams.getBucketname();
String objectname = obsParams.getObjectname();
//2、创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
//3、使用obsClient 的putObject方法,将数据存储至对象存储 OBS
PutObjectResult putObjectResult = obsClient.putObject(bucketname, objectname, inputStream);
return putObjectResult.getObjectUrl();
}
/**
* @param deleobjectname 需要删除对象的请求参数
* @return 返回删除状态
*/
@Override
public Result deleteOneFile(String deleobjectname) {
//1、从obsParams中获取OBS 访问配置参数
String endPoint = obsParams.getEndPoint();
String ak = obsParams.getAk();
String sk = obsParams.getSk();
String bucketname = obsParams.getBucketname();
//2、创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
//3、使用obsClient 的deleteObject方法,删除OBS中对象
try {
obsClient.deleteObject(bucketname, URLDecoder.decode(deleobjectname, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new Result(ResultCode.SUCCESS);
}
}
Test类,初始化数据
package com.huaweicloud;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.huaweicloud.cnmons.pojo.User;
import com.huaweicloud.dtse.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest()
public class test {
User user = new User();
@Autowired
private UserService userService;
@Test
public void saveUser() {
//1、初始化对象参数
String id = (String) IdWorker.getIdStr();
String mobile = "15927356938";
String username = "dtse";
String password = "dtse";
user.setId(id);
user.setMobile(mobile);
user.setUsername(username);
user.setPassword(password);
//2、调用UserService 的save方法保存对象至数据库中。
userService.save(user);
}
}
5.3 项目打包
- IDEA项目打包
- 项目目录target查看生成的jar包
5.4 项目部署
- jar包上传到服务器
- 运行jar包
相关文章:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)