小编Sho*_*orn的帖子

JOOQ:如何向生成的记录类添加接口

我正在使用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中定义自定义数据的示例,该数据被传递到自定义生成器类中?

java sql code-generation jooq

9
推荐指数
1
解决办法
911
查看次数

打字稿:可选字段与未定义的联合有什么区别?

我想定义一个带有可选字段的接口.我认为以下是同义词.

(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

typescript

9
推荐指数
1
解决办法
1070
查看次数

使groovy @Log注释保护内部闭包

编辑: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"调用?

groovy

8
推荐指数
1
解决办法
536
查看次数

如何在 IntelliJ IDEA 中启用“无守护进程”功能?

我有一个问题,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 运行配置中禁用。

intellij-idea gradle

8
推荐指数
1
解决办法
3386
查看次数

Spring-security 6 - 403 被拒绝,因为未调用 AuthenticationProvider

我最近将一个项目从使用 spring-security 升级6.0.0-M6gradle 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调用该方法以使我的安全配置正常工作?

我的解决方法是忽略弃用警告。

spring spring-security

8
推荐指数
1
解决办法
2439
查看次数

如何让 Terraform archive_file 资源获取对源文件的更改?

在 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 资源?

aws-lambda terraform

7
推荐指数
1
解决办法
3028
查看次数

Next.js:如何在所有环境中永久禁用遥测?

我想在所有环境中永远禁用 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 中手动禁用遥测,但它仍然报告遥测已启用:

在此输入图像描述

next.js

7
推荐指数
1
解决办法
5273
查看次数

Postgres 和 JOOQ 不区分大小写的正则表达式?

我目前在 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)

java sql jooq

6
推荐指数
1
解决办法
1597
查看次数

如何在Windows上使用Ubuntu的Windows JDK构建Gradle项目?

我的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运行我的构建。

java windows bash gradle windows-subsystem-for-linux

6
推荐指数
1
解决办法
898
查看次数

如何在使用AWS Codebuild时读取SSM参数?

我目前正在成功使用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凭据的环境变量)?

amazon-web-services aws-codebuild

6
推荐指数
1
解决办法
2252
查看次数