我正在使用JOOQ 3.6.4和Java 8从模式生成一组JOOQ记录.
一些表是类似结构的参考数据,假设它们有ID,CODE和VALUE列(它们可能有其他列,但它们至少都有这些列).
在我的代码中,不是由JOOQ生成的,我有一个接口"ReferenceData",它定义了与JOOQ为这三列生成的代码匹配的访问器.我想告诉JOOQ为"implements ReferenceData"它生成的Record对象添加一个子句(JOOQ已生成的代码将自动实现接口).
我不是要求JOOQ自动找出接口,我很好地列出了每个表应该在XML配置中实现的接口.
问题1:有没有办法配置JOOQ来生成implements子句而无需编写自定义生成器类?
如果我必须编写一个自定义生成器类 - 我仍然希望定义什么表记录实现XML配置中的接口.
问题2:是否有一个在XML中定义自定义数据的示例,该数据被传递到自定义生成器类中?
我想定义一个带有可选字段的接口.我认为以下是同义词.
(A):
interface State {
userDetails: undefined | string | DataStructure | Error;
}
Run Code Online (Sandbox Code Playgroud)
(B):
interface State {
userDetails?: string | DataStructure | Error;
}
Run Code Online (Sandbox Code Playgroud)
但是当我初始化状态时,(A)强制我将字段显式设置为undefined,如下所示:
static readonly initialAppState: AppState = {
userDetails: undefined
};
Run Code Online (Sandbox Code Playgroud)
但是(B)我可以完全省略该字段:
static readonly initialAppState: AppState = { };
Run Code Online (Sandbox Code Playgroud)
如果我在使用定义时试图省略该字段,(A)那么会不会抱怨说:
Property 'userDetails' is missing in type
Run Code Online (Sandbox Code Playgroud)
为什么在使用定义时必须明确设置字段(A)?在初始化时强制这种不同要求的两个定义之间有什么区别?
Typesript版本:2.3.4
编辑:GROOVY-6932已被记录,现已关闭 - 该问题在Groovy v2.4.8中标记为已修复.
我使用@ Slf4j注释向我的groovy类添加日志记录.
我喜欢它,因为AST转换将我的日志调用包装在"启用"检查中,在此处记录
我发现,如果从闭包内调用log方法,则guard子句不起作用.
在Groovy 2.2.0上运行,此代码只记录一条消息,但打印"被叫"两次.
@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.7+'),
@Grab(group='ch.qos.logback', module='logback-classic', version='1.+')])
import groovy.util.logging.Slf4j
new TestCode().doSomethingThatLogs()
@Slf4j
class TestCode {
void doSomethingThatLogs(){
log.info createLogString(1)
log.trace createLogString(2)
Closure c = { log.trace createLogString(3) }
c()
}
String createLogString(int p){
println "called with $p"
return "blah: $p"
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将"this","owner"和"delegate"说明符添加到日志语句中但结果相同.
我发现这个上下文的时候是我在使用XmlSlurper解析XML时尝试使用XmlUtil.serialize记录某些节点.
我正在通过使用调用XmlUtil类的toString()方法将NodeChild对象包装在轻量级对象中来解决此问题.这将工作正常,额外的包装类的开销不值得担心.我更感兴趣的是找到一个解决这个问题的简单方法,这样我就可以回过头来不必考虑记录消息的构建成本.
我问的问题是:有没有办法让日志级别保护条款在闭包内正常工作,而不是自己添加"log.traceEnabled"调用?
我有一个问题,Gradle 守护进程在后续运行中没有显示插件的 println 输出。
--no-daemon当我从命令行运行时,我可以通过添加来解决这个问题。
但是,当我从 IDEA 运行 Gradle 任务时,当我添加--no-daemon到“脚本参数”(而不是“VM 选项”)时,执行失败:
10:59:32: Executing external task 'lambdaGet --no-daemon'...
Unknown command-line option '--no-daemon'.
Run Code Online (Sandbox Code Playgroud)
如何--no-daemon在 IDEA 中使用带有 Gradle 任务配置的选项?
编辑:
请注意,此问题专门针对如何在 IDEA 中执行此操作。我不想全局禁用守护程序,只是从一个特定的 IDEA 运行配置中禁用。
我最近将一个项目从使用 spring-security 升级6.0.0-M6到gradle config6.0.0(如果您想查看的话)。该项目没有使用spring-boot。
我的securityFilterChain是通过代码配置的,看起来大约像这样:
http.
authenticationManager(authnManager).
securityContext().securityContextRepository(securityRepo).
and().
authorizeRequests(). // <-- DEPRECATED
requestMatchers(RAID_V2_API + "/**").fullyAuthenticated().
Run Code Online (Sandbox Code Playgroud)
从 FilterChain config 开始的完整代码库是公开的。
请注意, 的用法WebSecurityConfigurerAdapter 已被弃用,并且自从最初使用 . 以来我就没有再使用过它6.0.0-M6。所以调用类似的东西WebSecurityConfigurerAdapter.authenticationManagerBean()是行不通的。
这段代码工作正常,但调用会authorizeRequests()导致我想摆脱的弃用警告。
弃用标签表明我应该使用authorizeHttpRequests()它,但是当我这样做时 - 需要授权的请求(通过fullyAuthenticated()上面的规范)将被拒绝,并出现 403 错误。
发生这种情况似乎是因为我的AuthenticationProvider实例没有被调用,因为ProviderManager没有被调用。由于 AuthnProviders 不会被调用,安全上下文仍然包含预身份验证令牌,而不是经过验证的后身份验证令牌,因此最终调用最终会调用AuthorizationStrategy.isGranted()预isAuthenticated()身份验证令牌,该令牌(正确地)返回 false 和请求被拒绝。
如何使用该authorizeHttpRequests()方法但仍然可以ProviderManager调用该方法以使我的安全配置正常工作?
我的解决方法是忽略弃用警告。
在 Win 10 机器上使用 TF 0.7.2。
我正在尝试使用 TF 0.7.1 中引入的新“archive_file”资源,为在 AWS 中开发我的 lambda 函数设置编辑/上传周期
我的配置是这样的:
resource "archive_file" "cloudwatch-sumo-lambda-archive" {
source_file = "${var.lambda_src_dir}/cloudwatch/cloudwatchSumologic.js"
output_path = "${var.lambda_gen_dir}/cloudwatchSumologic.zip"
type = "zip"
}
resource "aws_lambda_function" "cloudwatch-sumo-lambda" {
function_name = "cloudwatch-sumo-lambda"
description = "managed by source project"
filename = "${archive_file.cloudwatch-sumo-lambda-archive.output_path}"
source_code_hash = "${archive_file.cloudwatch-sumo-lambda-archive.output_sha}"
handler = "cloudwatchSumologic.handler"
...
}
Run Code Online (Sandbox Code Playgroud)
这在我第一次运行时有效 - TF 创建 lambda zip 文件,上传它并在 AWS 中创建 lambda。问题在于更新 lambda。
如果我在上面的示例中编辑 cloudwatchSumologic.js 文件,TF 似乎不知道源文件已更改 - 它不会将新文件添加到 zip 并且不会将新的 lambda 代码上传到 AWS。
我在配置中做错了什么,还是不打算以这种方式使用 archive_file 资源?
我想在所有环境中永远禁用 Next.js 遥测(只是因为,好吧?我们不要通过无关的辩论来转移问题)。
我不希望遥测在开发人员环境、测试构建、CI 构建或其他任何地方运行。我正在尝试找到一个“代码”解决方案 - 我不想在环境中手动执行任何操作才能关闭遥测。
Next.js 很难确定是否启用了遥测,因为它仅在给定计算机上打印一次遥测警告。
我了解遥测是否正在运行的诊断是将命令添加next telemetry status到我的build脚本中package.json:
"build": "next telemetry status && next build",
Run Code Online (Sandbox Code Playgroud)
我尝试将以下内容添加到next.config.js:
module.exports = {
env: {
NEXT_TELEMETRY_DISABLED: '1',
},
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到.env:
NEXT_TELEMETRY_DISABLED=1
Run Code Online (Sandbox Code Playgroud)
但遥测命令仍然报告Status: Enabled
事实上,NEXT_TELEMETRY_DISABLEDenv 变量似乎根本不起作用,我尝试通过设置 env 变量在 IDE 中手动禁用遥测,但它仍然报告遥测已启用:
我目前在 JOOQ 中使用此代码:
Condition condition = DSL.trueCondition();
if( isNotBlank(email) ){
condition = condition.and(APP_USER.EMAIL.likeRegex(email));
}
Run Code Online (Sandbox Code Playgroud)
最终发出 Postgres 特定的 SQL,在数据库中进行正则表达式匹配:
app_user.email ~ '{email regex}'
Run Code Online (Sandbox Code Playgroud)
是否可以让 JOOQ 发布不区分大小写的版本:app_user.email ~* '{email regex}'?
我当前的解决方法是使用此代码:
if( isNotBlank(email) ){
condition = condition.and(
APP_USER.EMAIL.lower().likeRegex(email.toLowerCase()) );
}
Run Code Online (Sandbox Code Playgroud) 我的Windows 10计算机最近强行将我升级到Windows的新“ Creators Update”版本,“关于您的PC”小部件现在将我的操作系统版本报告为“ 1703”。
我以为在Windows上使用Linux / Ubuntu的Windows子系统来编译Gradle项目时会遇到困难。
我在安装了Windows JDK c:\jvm\jdk1.8.0_102。
在我的MinGW终端窗口(“ git bash”)中,我可以设置JAVA_HOME并从源目录执行gradle wrapper脚本,它将可以正常工作:
export JAVA_HOME=/c/jvm/jdk1.8.0_102
./gradlew tasks
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何用WSL做等效的事情。打开“ Windows上的Ubuntu上的Bash”终端,切换到我的源目录并调用以下命令:
export JAVA_HOME=/mnt/c/jvm/jdk1.8.0_102
./gradlew tasks
Run Code Online (Sandbox Code Playgroud)
结果如下:
ERROR: JAVA_HOME is set to an invalid directory: /mnt/c/jvm/jdk1.8.0_102
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
Run Code Online (Sandbox Code Playgroud)
请注意,Windows JDK在bash终端中运行良好。$JAVA_HOME/bin/java.exe -version在Ubuntu终端中执行可以正常工作。
问题是:
有什么方法可以使用我先前安装的Windows JDK从“ Windows上的Ubuntu上的Bash”终端运行gradlew脚本。
请注意:
我特别在问是否可以使用Windows JDK运行我的Gradle脚本,而不是使用WSL安装的Ubuntu / Linux JDK。我知道我可以通过在Windows Sunbsystem for Linux中安装Linux JDK来运行gradle wrapper脚本,但是我试图弄清楚是否可以使用Windows JDK运行我的构建。
我目前正在成功使用codebuild进行简单的构建任务(在非vpc配置中).
但是现在我正在尝试运行一个读取SSM参数值的构建任务,并且它失败了,因为它无法加载任何凭据,明显的原因是:
com.amazonaws.auth.InstanceProfileCredentialsProvider@5754b242: Unable to load credentials from service endpoint
Run Code Online (Sandbox Code Playgroud)
我分配给codebuild项目的IAM服务角色确实拥有ssm:GetParameters我正在尝试读取的参数的权限(如果这是问题,我希望看到一条unauthorized消息,而不是unable to load credentials).
我正在使用Java SDK进行SSM GetParameter调用,我已经确认从EC2实例运行时可以从SSM参数读取,所以我很确定这里的问题是Codebuild.
为了进一步诊断问题,我尝试添加构建命令来curl对照AWS实例元数据地址:
curl 169.254.169.254/latest/meta-data/iam/info
Run Code Online (Sandbox Code Playgroud)
它不是像普通的EC2环境那样返回实例元数据,而是超时.
因此,问题的根源似乎是代码构建环境不能与AWS元数据查找地址一起使用,这会导致AWS提供商链无法查找凭据.
如何从codebuild读取我的SSM参数(没有硬编码或使用SDK凭据的环境变量)?