我的应用程序使用JPA和Hibernate,我看到hibernate生成了一些有趣的SQL查询,我的日志文件中有很多连接.该应用程序现在没有很多用户,我担心hibernate生成的一些查询会在数据库大小增加时引起问题.
我已经通过EXPLAIN命令运行了hibernate生成的一些sql查询来查看生成的查询计划.
EXPLAIN的输出是否依赖于数据库的大小?当我的数据库大小增加时,查询规划器会为相同的SQL查询生成不同的计划吗?
在开发/部署周期的哪个阶段我应该查看由hibernate生成的SQL查询的SQL查询计划?什么时候使用EXPLAIN.
当数据库如此之小以至于每个查询无论在0.5秒内运行的复杂程度如何时,如何使用解释的输出来确定查询是否会成为问题?
我使用Postgres 9.1作为我的应用程序的数据库,但我对上述问题的一般答案感兴趣.
我有一个Google番石榴缓存,它从数据库加载数据并使用主键缓存它.我最终从数据库创建的对象是不可变的,构建对象需要访问多个表.在以下场景中会发生什么:
当load(x)执行时调用invalidate(x)时,Guava Loading Cache会做什么?
是否有postgres工具,允许我监视一个事务并运行查询,就像我是该事务的一部分一样.
我的java代码有一个断点,它已启动一个事务但尚未提交事务,因为它正在等待一个断点.我想要做的是能够以事务看待它的方式查看数据库的状态.
理想情况下,我想要一个工具,让我有一个类型的SQL控制台,我可以输入东西作为该tx的一部分,所以我可以编写select语句来查看尚未提交的东西.
我只需要这个工具用于我的开发工作站,我使用postgres 9.1但如果需要可以轻松升级到9.2或9.3.
在Spring Data中是否可以从方法名称关闭查询生成?
鉴于界面
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
Run Code Online (Sandbox Code Playgroud)
我希望spring security能够产生一个错误,说明从方法名称生成查询已被关闭,请使用显式@Query注释,如此.
public interface UserRepository extends Repository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1 and u.lastname = ?2")
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
Run Code Online (Sandbox Code Playgroud)
我想关闭自动查询生成,因为我认为更容易阅读查询并知道发生了什么,而不是阅读方法名称并转换为Spring数据将生成的查询,同样在大型团队中有很多开发人员可能还不熟悉Spring数据@Query更具可读性?
如何从Spring JPA中的方法名称关闭查询创建?
我正在学习Flutter和Dart。我注意到该pubspec.yaml文件似乎不仅包含第三方库的依赖版本。例如。
# The following section is specific to Flutter.
flutter:
uses-material-design: true
Run Code Online (Sandbox Code Playgroud)
我了解Dart Pub工具定义了的格式,pubspec.yaml并且像Flutter这样的框架似乎可以pubspec.yaml通过额外设置来增强,提出了以下问题:
pubspec.yaml设计用来提供配置标志或只依赖呢?pubspec.yaml惯用的Dart还是独特的?pubspec.yaml只能由分析pub工具,或者它在运行时解析为一个通用的应用程序配置文件?pubspec.yaml并uses-material-design: true在运行时提供可用的设置?例如,在使用 http 包或进行常规 IO 操作时出现抖动
import 'package:http/http.dart' as http;
http.Response response = await http.get(url);
if (response.statusCode == 200) {
var json = jsonDecode(response.body);
}
Run Code Online (Sandbox Code Playgroud)
主应用程序 dart 代码在 UI Task Runner 线程上运行。IO 任务运行器似乎只是让 dart 引擎读取图像处理耗时的图像 IO 而不是应用程序 IO 发生的地方?
我知道 IO 库具有基于 Future 的无阻塞接口,因此我提供给 IO 库的回调将在 UI 线程上运行,但是实际的 IO 操作本身是否存在 Dart VM 用于执行这些操作的操作系统线程操作?
例如,如果我尝试上传/下载一个 800MB 的视频文件,是否有 Dart VM 使用的后台 IO 线程执行实际 IO?
是否应该将单独的隔离用于大型 IO 操作,例如上传/下载大文件?
Google Guava缓存文档指出:
刷新与驱逐并不完全相同.正如在LoadingCache.refresh(K)中指定的那样,刷新密钥会加载密钥的新值,可能是异步的.在刷新密钥时仍会返回旧值(如果有),这与逐出驱动相反,后者强制检索等待,直到重新加载该值.
如果在刷新时抛出异常,则保留旧值,并记录并吞下异常.
在我的用例中,这种异常的记录和吞没非常糟糕,因为这意味着如果刷新抛出异常,则缓存的用户将继续在Cache中找到陈旧数据.
如何确保如果在刷新时抛出异常,缓存开始返回null或调用load方法?
在我的mac os x开发机器上,我安装了postgres 9.1 /Library/PostgreSQL/9.1并且PostgreSQL的数据目录在/Library/PostgreSQL/9.1/data我已经配置了日志记录,所以我从postgres获得了关于在服务器上执行什么SQL查询的好日志....等等这些都写给/Library/PostgreSQL/9.1/data/pg_log我使用企业db预打包的postgres二进制文件.
问题是$ PGDATA由运行postgres进程的postgres用户拥有.当我更改了数据目录的权限时,chmod o+xr datapostgres拒绝启动并告诉我它不能以postgres目录开始,除了postgres用户之外还有权限.
FATAL: data directory "/Library/PostgreSQL/9.1/data" has group or world access
DETAIL: Permissions should be u=rwx (0700)
Run Code Online (Sandbox Code Playgroud)
只是为了获取日志文件而不得不进出postgres dir是很烦人的.
在Mac OS X上配置postgres日志记录的好方法是什么,以便从登录的任何用户轻松访问日志文件,而不必使用sudo或成为postgres用户?
更新请参阅下面的答案,了解我过去使用的确切配方.
在我的应用程序中,我遇到一种情况,即spring mvc始终选择错误的控制器方法来执行.从下面的弹簧调试日志显示问题,它找到两个匹配一个用于我的通用处理所有未映射的映射控制器映射到/api/**和一个用于实际的东西我正在寻找api/companies/2/records/cabinets/FileTypes/50/1spring mvc然后选择/api/**处理程序通过更具体的处理程序它找到.
我对spring的理解是,如果请求映射有两个匹配项,那么spring将使用更长的url选择handle方法.为什么spring mvc选择较短的映射?
给定以下映射:
/api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId} 映射到method1/api/** 映射到method2api/companies/2/records/cabinets/FileTypes/50/1应该将mvc选择的路径作为上述两个url的处理程序方法.
这里是调试日志的相关行.
17:58:49,858 DEBUG [DispatcherServlet] DispatcherServlet with name 'main' processing PUT request for [/web/api/companies/2/records/cabinets/FileTypes/50/1]
17:58:49,858 TRACE [DispatcherServlet] Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@2b25f2be] in DispatcherServlet with name 'main'
7:58:49,858 DEBUG [RequestMappingHandlerMapping] Looking up handler method for path /api/companies/2/records/cabinets/FileTypes/50/1
17:58:49,859 TRACE [RequestMappingHandlerMapping] Found 2 matching mapping(s) for [/api/companies/2/records/cabinets/FileTypes/50/1] : [{[/api/**],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}, {[/api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}]
Run Code Online (Sandbox Code Playgroud) maven故障安全插件需要能够区分单元测试和集成测试.似乎在使用JUnit时,一种分离测试的方法是使用JUnit @Categories注释.这篇博客文章介绍了如何使用junit http://www.agile-engineering.net/2012/04/unit-and-integration-tests-with-maven.html
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用TestNG和Maven故障安全插件完成相同的操作.我想在测试类上使用注释将它们标记为集成测试.
postgresql ×3
dart ×2
flutter ×2
guava ×2
java ×2
spring ×2
caching ×1
concurrency ×1
dart-pub ×1
macos ×1
maven ×1
mysql ×1
oracle ×1
spring-data ×1
spring-mvc ×1
sql ×1
sql-server ×1
testng ×1
transactions ×1