我有一个在Azure App Service上运行的Servlet(Jersey2 + Jax-rs)API应用程序。
此API正在从Azure表存储中检索数据并发送回客户端。
所以这是我的问题,在实现Azure Storage SDK的“静态方法”和“实例”之间有更好的选择。
例如我的代码是什么样的,
public class AzureTableStorage {
private static final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=;"
+ "AccountKey=";
public static CloudTable getTable() {
try {
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudTableClient tableClient = storageAccount.createCloudTableClient();
CloudTable cloudTable = tableClient.getTableReference("");
return cloudTable;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Entity getEntity(String rowKey) {
// TODO Auto-generated method stub
try {
TableOperation operation = TableOperation.retrieve("", "", xxx.class);
Entity entity = AzureTableStorage.getTable().execute(operation).getResultAsType();
// Output the entity.
return entity;
} catch (Exception e) {
// Output the stack trace.
e.printStackTrace();
return null;
}
}
}
并使用like
AzureTableStorage.getEntity(rowKey);
这是个坏主意吗?
请有人给我一些答案吗?
BTW我已经看过了,
Java: when to use static methods
但仍然无法找到答案。
答案 0 :(得分:0)
根据我的经验,我认为使用Azure表存储的设计模式与ORM for RDBMS非常相似,但似乎不再需要考虑性能优化,因为Azure Java SDK包含了相关的REST API。
所以在我看来,在某些情况下使用单例模式为static
声明CloudClient
对象,例如批处理任务或计划任务。并创建一个容器作为池来控制CloudClient
个对象的数量,并从池中获取Client
实例,以通过用户会话执行操作,包括Create,Read,Update&删除。
GitHub上有一些官方样本作为我认为您可以参考的最佳做法,请参阅https://github.com/Azure/azure-storage-java/tree/master/microsoft-azure-storage-samples/src/com/microsoft/azure/storage/table和https://github.com/Azure-Samples/storage-table-java-getting-started。