环境:Spring应用程序,使用JOOQ 3.7,使用Postgres作为我的数据库,自动从模式生成JOOQ映射代码.
我一直在将一些代码从Hibernate移植到JOOQ.Hibernate代码在每个上下文的基础上提取一些身份验证细节,以填充"createdBy","updatedBy",日期等字段.
我目前只能通过JOOQ看到这样做的唯一方法是开发人员必须记住编写代码以便在每次更新对象时手动更新字段,我可以看到它会很乏味且容易忘记填充字段.
使用JOOQ,我是否有办法以更好的方式处理每个表上的"历史字段",而不是手工编写一堆代码?
我们目前不使用DAO,我宁愿避免编写/生成整个代码层来处理这些历史字段.
另一个选择可能是在数据库中执行此操作,如果JOOQ无法帮助解决问题,那么很可能就是我们要做的.
我正在尝试编写自己的gradle插件,它需要能够配置一组对象 - 这些对象中有多少以及它们被调用的内容取决于用户.
用于创建具有高级可定制性的自定义gradle插件的doco非常差.它提到project.container()了做这种事情的方法,但我无法弄清楚如何使它在我的用例中工作.
这是我的插件配置DSL的一个示例:
teregrin {
terraformVersion = '0.6.6'
root("dev"){
accessKey = "flobble"
}
root("prd"){
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的插件扩展对象,允许我配置它:
class TeregrinPluginExtension {
boolean debug = false
boolean forceUnzip = false
String terraformVersion = null
Set<TeregrinRoot> roots = []
def root(String name, Closure c){
def newRoot = new TeregrinRoot(name)
c.setDelegate(newRoot)
c()
roots << newRoot
}
}
Run Code Online (Sandbox Code Playgroud)
这些扩展以标准方式连接在我的插件中:
project.extensions.create("teregrin", TeregrinPluginExtension)
Run Code Online (Sandbox Code Playgroud)
这样做没问题,但这是一种非常丑陋的配置风格,并不是典型的gradle DSL风格.
如何将我的插件配置DSL更改为:
teregrin {
terraformVersion = '0.6.6'
roots {
dev {
accessKey = "flobble"
}
prd {
}
} …Run Code Online (Sandbox Code Playgroud) 我git describe在构建时用作应用程序版本控制的驱动程序。它看起来大致如下:git describe --always --dirty --match version*
我用类似的模式标记我的版本,version.1.2.3构建根据最后一次用类似标记的提交来计算应用程序的版本version.*。如果我没有标记给定的提交,那么版本号最终会类似于version.1.14.3-24-ged66bf5,它基于最近的标签,自该标签以来的提交次数和 git commit id。
这对我个人来说非常有效,但是我在 CI 服务器上基于浅层克隆进行构建时遇到了问题。
在 jenkins 中的 git 构建中使用“浅克隆”选项时(我猜它只是在执行“--depth = 1”),我的git describe命令不再执行我想要它执行的操作。我的版本号最终只是提交 id - 我想这是因为浅克隆中没有标记版本,所以--alwaysdescribe 命令的参数最终只是吐出提交 id。
我暂时可以通过不进行浅层克隆来解决这个问题。
但我真的很喜欢从 git describe 驱动我的版本控制 - 即使使用浅克隆,我如何继续使用它?我认为我需要能够做的是在浅克隆时指定,我希望深度是“从分支的尖端回到具有标签匹配的最新版本version.*”。
这是我可以用 Git 做的事情吗?
我的前端代码直接与后端的应用程序负载平衡器对话(使用HTTPS上的JSON)。
我开始检索的数据量不只是微不足道的-因此,我认为我应该弄清楚必须进行哪些更改以支持压缩HTTP数据。
我碰到过几篇文章,指出AWS负载均衡器压缩已损坏。
示例:https://medium.com/@sanjay.rajak/why-i-replaced-aws-elastic-load-balancer-to-haproxy-load-balancer-72207fad2d96
但是据我从AWS文档中了解到-ELB / ALB等实际上根本不支持压缩。
作为一种变通方法,如果需要,我可以通过Cloudfront或API网关定向后端调用以进行压缩-考虑到这些服务还可以对请求进行缓存等,这甚至可能是“正确”的方式。 。
但是,在我开始讨论这些其他服务之前,AWS负载均衡器是否根本不支持压缩?
我正在尝试修改架构中枚举的值(feature下面示例中的“”)。
我尝试通过重命名旧枚举并引入一个具有我想要的值的新枚举,然后将表定义更改为新枚举来实现此目的。
我在这里关注这篇博客文章:https://blog.yo1.dog/updating-enum-values-in-postgresql-the-safe-and-easy-way/。但我的列实际上是枚举的数组,而不是简单的枚举列。
当我尝试运行alter table以下语句中的语句时,出现错误:
[42804] 错误:列“features”的类型为 feature_old[],但表达式的类型为 feature_v2[] 提示:您需要重写或转换表达式。
alter type feature rename to feature_old;
create type feature_v2 as enum (
'enable_create_keyword',
'enable_make_payment',
'enable_test_data_flags'
);
-- ... cleanup of column array values to be compatible with new enum ...
alter table app_user alter column features type feature_v2
using features::feature_old[]::feature_v2[];
drop type feature_old;
Run Code Online (Sandbox Code Playgroud)
但是,我迷路了 - 强制转换表达式应该是什么样子?
Postgres 版本是 9.6
编辑
这是@VaoTsun 请求的feature枚举和表的先前版本的架构 DDL 的相关部分。app_user
-- feature enum and column
create type …Run Code Online (Sandbox Code Playgroud) 目前,我使用单个SSM 参数来存储由换行符分隔的一组属性,如下所示:
property1=value1
property2=value2
property3=value3
Run Code Online (Sandbox Code Playgroud)
(我知道 4K 大小限制,没关系。)
这适用于String存储环境配置等非敏感信息的普通类型参数,但我也想对使用SecureString参数类型的秘密做类似的事情。
问题是我无法在控制台中编辑参数值,因为它使用的 HTML 输入字段type="password"不处理换行符。
多行值适用于实际参数存储后端 - 我可以使用 SSM API 设置多行值,没问题,也可以使用 EC2 CLI 正确读取。
但我无法使用控制台编辑它们。这是一个问题,因为使用SecureString参数的全部意义在于我打算通过控制台编辑/查看这些秘密的唯一地方(以便控制权限并审核访问)。
我可以实施一些基础设施解决方法(每个秘密一个参数,将秘密存储在 S3 或其他秘密存储服务上等)但它们都有缺点 - 我只是想找出是否有办法解决这个问题控制台?
有什么办法可以解决这个问题并使用控制台来编辑多行 SecureString 参数?
我可以用来告诉浏览器使用文本区域而不是“密码”类型字段的任何类型的浏览器解决方法或黑客攻击?我正在使用 Chrome,但我很乐意通过使用其他浏览器或其他东西来解决这个问题(编辑机密非常罕见,并且在控制台中查看多行值工作正常)。
编辑
发布这个问题后,AWS 通知我有一个全新的“AWS Systems Manager”用户界面,但它仍然有同样的问题 - 我在这个新用户界面上尝试了以下浏览器黑客,但没有运气。
失败的浏览器 hack 尝试 1:我尝试打开浏览器控制台,运行document.getElementById("Value").value = "value1\nvalue2"然后单击保存按钮,该按钮设置了 Ijectec 的值,但换行符被过滤掉了。
失败的浏览器黑客尝试 2:我尝试使用浏览器检查器将元素更改为 a TextArea,然后输入两行输入并单击保存,但这根本没有设置值。
考虑以下函数重载:
function f(key: undefined);
function f(key: string | undefined, value: object | undefined);
Run Code Online (Sandbox Code Playgroud)
我希望使用单个显式未定义来进行符合条件的调用f(undefined),但是对于所有其他情况需要两个参数.并且上面的工作正常,直到我传递一个带有类型的变量any - 似乎any可以被转换为undefined(是的,它似乎是合乎逻辑的,因为它是任何).
我如何禁止与单个anyargumnent通话?
完整的演示代码:
function f(key: undefined);
function f(key: string | undefined, value: object | undefined);
function f(key: string | undefined, value?: object | undefined) {
console.log(key, value);
}
// No errors - RIGHT
f(undefined);
f("", {});
f("", undefined);
f(undefined, undefined);
f(undefined, {});
// Errors - RIGHT
f("");
// No errors - WRONG
declare var …Run Code Online (Sandbox Code Playgroud) 最近将我的 Terraform 项目升级到 AWS 提供商 3.74.0 和 TF 1.1.4(从更旧的版本)。
我突然收到此自动缩放计划报告外部更改:
resource "aws_autoscaling_schedule" "api-svc-tst-down-schedule" {
scheduled_action_name = "api-svc-tst-down-schedule"
min_size = 0
max_size = 1
desired_capacity = 0
// Minute Hour DayOfMonth Month DayOfWeek
recurrence = "0 13 * * *"
autoscaling_group_name = aws_autoscaling_group.api-svc-tst-asg.name
lifecycle {
ignore_changes = [start_time]
}
}
Run Code Online (Sandbox Code Playgroud)
该plan命令现在报告:
Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the
last "terraform apply":
# aws_autoscaling_schedule.api-svc-tst-down-schedule has changed
~ resource "aws_autoscaling_schedule" …Run Code Online (Sandbox Code Playgroud) 编写表单代码时:
String.format("blah %s %s", value1);
Run Code Online (Sandbox Code Playgroud)
IntelliJ 将警告格式模式的数量和实际参数之间存在不匹配:too few arguments for format string (found:1, expected: 2).
有没有办法将此逻辑应用于自定义方法?例如:
/** @see String#format(String, Object...) */
public String myMethod(String msg, Object... args){
return String.format("blah " + msg, args);
}
...
myMethod("%s %s", value1);
Run Code Online (Sandbox Code Playgroud)
关键是我想让 IDEA 告诉我我搞砸了。
如示例所示,我已经记录了这些委托给String.format().
理想情况下,我宁愿避免复制该文档 - 尽管我愿意将其转换为自定义格式,或者可能是注释(尽管最好不是 IDEA 注释)。
当尝试使用 Supabase 更新我的第一个表时,代码如下:
await db.from("welcome").update({visit_count: newCount});
Run Code Online (Sandbox Code Playgroud)
出现错误:
{
"hint":"To enable updating the table, set REPLICA IDENTITY using ALTER TABLE.",
"details":null,"code":"55000",
"message":"cannot update table \"welcome\" because it does not have a replica identity and publishes updates"
}
Run Code Online (Sandbox Code Playgroud) amazon-ec2 ×1
amazon-elb ×1
aws-ssm ×1
git ×1
gradle ×1
groovy ×1
html ×1
java ×1
jooq ×1
postgresql ×1
spring ×1
sql ×1
ssm ×1
supabase ×1
terraform ×1
typescript ×1