1. 機(jī)構(gòu)類型的CRUD
2. 使用DTO的方式封裝數(shù)據(jù)
使用場景:前臺發(fā)送數(shù)據(jù)封裝對象的時(shí)候鳞芙,一些字段不能滿足需求,可能是其他類中的,因此可以使用dto(data to object)的方式封裝數(shù)據(jù)!
原則:
①:扁平化(接收幾個(gè)字段,就定義幾個(gè)字段)
②:使用對象組合的方式
example:
public class EnteringDTO {
private Employee employee;
private Tenant tenant;
private Long mealId;
...
}
3. course使用Hystrix熔斷功能返回托底數(shù)據(jù)
①:配置文件中開啟Hystrix
feign:
hystrix:
enabled: true
②:創(chuàng)建一個(gè)類實(shí)現(xiàn)接口伦忠,使用匿名內(nèi)部類的方式重寫托底返回的數(shù)據(jù)
public class CourseFeignFallbackFactory implements FallbackFactory<RedisFeignClient> {
@Override
public RedisFeignClient create(Throwable throwable) {
return new RedisFeignClient() {
@Override
public AjaxResult set(String key, String value) {
return null;
}
@Override
public AjaxResult get(String key) {
return AjaxResult.me().setSuccess(false)
.setMessage("發(fā)生了一點(diǎn)小問題:["+throwable.getMessage()+"]");
}
};
}
}
③:在feign客戶端中指定托底類 fallback:不能拿到異常信息,fallbackFactory:可以拿到異常信息
@FeignClient(value = "redis-server",fallbackFactory = CourseFeignFallbackFactory.class)
public interface RedisFeignClient {
@PostMapping("/redis/set")
AjaxResult set(@RequestParam("key") String key, @RequestParam("value")String value);
@GetMapping("/redis/get/{key}")
AjaxResult get(@PathVariable("key") String key);
}
4. 分布式文件處理
課堂圖片.jpg
4.1 linux安裝FastDFS
參考上篇文章
4.2 FastDFS服務(wù)搭建
①:集成到注冊中心
②:集成到配置中心
③:zuul配置網(wǎng)關(guān)地址
④:swagger集成
⑤:zuul中swagger整合
4.3 FastDFS實(shí)現(xiàn)文件上傳
①:導(dǎo)入FastDFS依賴
在此網(wǎng)站https://github.com/happyfish100/fastdfs-client-java 下下載壓縮包稿辙,解壓昆码,在當(dāng)前目錄執(zhí)行cmd
執(zhí)行命令 mvn -clean install 打成jar包,安裝到本地倉庫邻储!然后在idea中導(dǎo)包赋咽!
②:在resources下創(chuàng)建配置文件fdfs_client.conf 指向tracker_server虛擬機(jī)的ip
tracker_server=118.25.154.214:22122
②:導(dǎo)入工具類
public class FastDfsApiOpr {
public static String CONF_FILENAME = FastDfsApiOpr.class.getClassLoader()
.getResource("fdfs_client.conf").getFile();
/**
* 上傳文件
* @param file
* @param extName
* @return
*/
public static String upload(byte[] file,String extName) {
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
String fileIds[] = storageClient.upload_file(file,extName,null);
System.out.println(fileIds.length);
System.out.println("組名:" + fileIds[0]);
System.out.println("路徑: " + fileIds[1]);
return "/"+fileIds[0]+"/"+fileIds[1];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 上傳文件
* @param extName
* @return
*/
public static String upload(String path,String extName) {
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
String fileIds[] = storageClient.upload_file(path, extName,null);
System.out.println(fileIds.length);
System.out.println("組名:" + fileIds[0]);
System.out.println("路徑: " + fileIds[1]);
return "/"+fileIds[0]+"/"+fileIds[1];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 下載文件
* @param groupName
* @param fileName
* @return
*/
public static byte[] download(String groupName,String fileName) {
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
byte[] b = storageClient.download_file(groupName, fileName);
return b;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 刪除文件
* @param groupName
* @param fileName
*/
public static void delete(String groupName,String fileName){
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getTrackerServer();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
int i = storageClient.delete_file(groupName,fileName);
System.out.println( i==0 ? "刪除成功" : "刪除失敗:"+i);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("刪除異常,"+e.getMessage());
}
}
}
④:在controller中執(zhí)行文件上傳,可以使用io工具包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
@RestController
@RequestMapping("/fastdfs")
public class FastDFSController {
@PostMapping("/upload")
public AjaxResult upload(MultipartFile file){
String fileExtensionName = FilenameUtils.getExtension(file.getOriginalFilename());
try {
String filePath = FastDfsApiOpr.upload(file.getBytes(), fileExtensionName);
return AjaxResult.me().setSuccess(true).setMessage("上傳成功吨娜!").setResultObj(filePath);
} catch (IOException e) {
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage("上傳失斉洹!");
}
}
}