自从更新到 Spring Boot 2 后,我注意到在使用 spring.jpa.properties.javax.persistence.schema-generation.scripts.* 选项时生成 DDL 文件的方式发生了变化。
以前,在 Spring Boot 1.5 中,每次我运行我的应用程序或测试时(我也有检查这些文件内容的集成测试),DDL 文件会重新生成,例如:
drop table testSchema.App if exists
drop table testSchema.AppMetadata if exists
drop table testSchema.Server if exists
drop table testSchema.User if exists
drop table testSchema.UserRole if exists
drop table testSchema.UserToken if exists
Run Code Online (Sandbox Code Playgroud)
现在,升级到 Spring Boot 2.0.5 后,每次我运行我的测试或应用程序时,内容都会以这种方式附加到 DDL 文件中:
drop table testSchema.App if exists
drop table testSchema.AppMetadata if exists
drop table testSchema.Server if exists
drop table testSchema.User if exists
drop table testSchema.UserRole if exists
drop table testSchema.UserToken …Run Code Online (Sandbox Code Playgroud) 我有一个 Spring Boot 应用程序 (v2.1.5),它使用 JPA (Hibernate) 连接到 Postgres DB。Spring Boot 使用 HikariCP 进行连接池。在我的生产环境中,我看到以下查询每隔几秒执行一次,无论数据库活动如何(几乎就像它们是某种运行状况检查?):
SET application_name = 'PostgreSQL JDBC Driver'
Run Code Online (Sandbox Code Playgroud)
我正在努力弄清楚为什么这些查询如此频繁地执行,以及是否可以避免它们,因为在我的本地环境中,仅在对数据库执行查询时才执行上述语句。我仍然不明白为什么,但与生产相比,它的频率较低且行为不同。
这些询问有必要吗?它们可以避免吗?谢谢。
更新:
以下是 Spring boot 应用程序使用 HikariCP 连接到的数据库收到的查询的屏幕截图。时间显示为“刚刚”,因为显示的所有查询仅相隔约 0.5 秒,并且都在“当前分钟”内。
我开发了以下方法,它检查应用程序与服务器通信的能力.该方法执行一个简单的查询,并知道如果它得到一个结果,应该连接应用程序(基本的ping机制).
- (BOOL)isAppConnected
{
__block BOOL isConnected = NO;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[[SFRestAPI sharedInstance] performSOQLQuery:@"SELECT id FROM Account LIMIT 1"
failBlock:^(NSError *e) {
isConnected = NO;
NSLog(@"NOT CONNECTED %@", e);
NSLog(@"fail block ON THE MAIN THREAD? %hhd", [NSThread isMainThread]);
dispatch_semaphore_signal(semaphore);
} completeBlock:^(NSDictionary *dict) {
isConnected = YES;
NSLog(@"%@", dict);
NSLog(@"complete block ON THE MAIN THREAD? %hhd", [NSThread isMainThread]);
dispatch_semaphore_signal(semaphore);
}];
// if the wait times-out we will receive a non-zero result and can assume no connection to SF
//When …Run Code Online (Sandbox Code Playgroud) 我正在 Graal 上编写一个应用程序,它将能够以不同的语言执行小脚本。
我正在尝试为我用来将 Context.eval() 调用(类型:值)的结果转换/处理为 Java 对象的类编写一些单元测试。我从文档中知道一个 Value 实例总是绑定到一个上下文,所以当我尝试写这样的东西时:
@Test
public void NumericFloatTest() throws ScriptExecutionException {
GuestLanguageResultProcessor LangProcessor = new GuestLanguageResultProcessor();
Float javaValue = (float) 43.25;
Value numValue = Value.asValue(javaValue);
LangProcessor.processResult(numValue);
Object result = LangProcessor.processResult(numValue);
assertThat(result.getClass()).isEqualTo(Float.class);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
java.lang.IllegalStateException: No current context is available. Make sure the Java method is invoked by a Graal guest language or a context is entered using Context.enter().
Run Code Online (Sandbox Code Playgroud)
我想从概念上讲,拥有一个没有相关客户代码位的“值”实例是没有意义的,所以我的问题是:
我该如何测试我的 GuestLanguageResultProcessor 类?我是否必须通过创建上下文来“膨胀”我的单元测试?
专家的附带问题:我还使用此类 (GuestLanguageResultProcessor) 从多语言 Value 实例中提取 Java 值,以便我可以关闭上下文。换句话说,在我看来,在能够执行 Context.close() 之前,我需要调用 [value instance].asString() 或 …
这个问题与以下内容有些相关: GraalVM - Using Polyglot Value without a context
在我的应用程序中,以客户语言运行的代码片段不需要知道注入的参数(通过绑定成员)是 Java 参数。相反,对于用客语开发的人来说,论点应该看起来只是客语本身的另一个论点。
例如,我想要一个从我的 Java 主机语言注入到 JS 来宾脚本的数组,以这种方式:
Value guestLanguageBindings = context.getBindings(scriptData.getLanguage().toString());
guestLanguageBindings.putMember(argumentName, argumentValue);
Run Code Online (Sandbox Code Playgroud)
作为 JS 数组“到达”来宾语言,而不是像现在正在发生的 java.util.ArrayList。
目前,我通过将每个非原始类型(我注意到 String、int 等作为 JS“类型”到达 JS)转换为 JSON 并转换回来宾语言来解决这个问题。
这有效,但我想知道是否有更合适的方法来做到这一点,或者确实使用绑定是正确的方法?
谢谢!
graalvm ×2
ddl ×1
hikaricp ×1
ios ×1
iphone ×1
jpa ×1
objective-c ×1
postgresql ×1
semaphore ×1
spring-boot ×1
spring-data ×1
spring-jdbc ×1