小编Mar*_*rco的帖子

转储Postgres Sql时转义文本内的引号

我们说我的桌子是:

  id    text
+-----+----------+
  123 | foo bar
  321 | bar "baz"
Run Code Online (Sandbox Code Playgroud)

在倾销时有没有办法逃避'baz'周围的那些报价?

我的查询形式如下:

SELECT text FROM aTable WHERE ...
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

foo bar
bar \"baz\"
Run Code Online (Sandbox Code Playgroud)

而不是:

foo bar
bar baz
Run Code Online (Sandbox Code Playgroud)

sql postgresql escaping

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

执行单个命令时Bash'吞咽'子shell子进程

陷入意外bash/ sh行为,我想知道有人可以解释其背后的基本原理,并为下面的问题提供解决方案.

在交互式bashshell会话中,我执行:

$ bash -c 'sleep 10 && echo'

随着psLinux上,它看起来是这样的:

\_ -bash \_ bash -c sleep 10 && echo \_ sleep 10

进程树是我所期望的:

  • 我的交互式bash shell进程($)
  • 子shell进程(bash -c ...)
  • 睡眠儿童过程

但是,如果我的命令部分bash -c单个命令,例如:

$ bash -c 'sleep 10'

然后吞下中间的子shell,并且我的交互式终端会话在孩子处理时"直接"执行睡眠.进程树看起来像这样:

\_ -bash \_ sleep 10

所以从流程树的角度来看,这两个产生了相同的结果:

  • $ bash -c 'sleep 10'
  • $ sleep 10

这里发生了什么?

现在我的问题是:有没有办法强制中间shell,不管传递给表达式的复杂性如何bash -c ...

(我可以附加类似于; echo;我的实际命令和"工作"的东西,但我宁愿不这样做.是否有更合适的方法来强制中间过程存在?)

(编辑: …

linux bash shell subshell

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

Git 日志:列出所有父提交

在共享的 GitHub 存储库中,我想用它git log来显示最近提交的列表。

当前的历史类似于以下内容:

                       (master)
B------Merge1--Merge2--Merge3
      /       /       / 
 - -C1       /       /
      - - -C2       /
 - - -C3----------C4
Run Code Online (Sandbox Code Playgroud)

Merge提交的合并拉请求的结果,并C提交由该仓库的叉到来。

git log 显示如下:

git log --oneline master
    Merge3
    Merge2
    Merge1
    B
Run Code Online (Sandbox Code Playgroud)

但我真正感兴趣的是C提交。 git log --graph是我发现显示 C1、C2 和 C3 的唯一可能方式。

是否还有其他选项(不涉及--graph)可以显示 C1、C2 和 C3?

我希望能够做这样的事情

git log --oneline --no-merges <...insert magic here...> master
 C4
 C3
 C2
 C1
 B
Run Code Online (Sandbox Code Playgroud)

我在手册页中发现的唯一明智的事情是--first-parent,但我发现无法禁用或反转它。

git github git-log

5
推荐指数
1
解决办法
3353
查看次数

Spring Boot 中动态属性的选项

我有一个应用程序,具有一些属性形式的外部化配置。我希望应用程序能够对此类属性的更改做出反应,而无需重新启动或完全刷新上下文。

我不清楚我的选择是什么。

人工示例:应用程序实现一个服务,该服务接收请求并决定是排队还是拒绝它们。队列的最大大小是一个属性。

final int queueMaxSize = queueProperties.getMaxSize();
if (queue.size() >= queueMaxSize) { //reject }
Run Code Online (Sandbox Code Playgroud)

哪里QueueProperties有一个带有@ConfigurationProperties注释的类。

@ConfigurationProperties(prefix = "myapp.limits.queue")
@Getter
@Setter
public class QueueProperties {
  public int maxSize = 10;
}
Run Code Online (Sandbox Code Playgroud)

这允许我通过系统属性、配置文件等控制行为。 但是,我希望能够在不释放/部署/重新启动/刷新应用程序的情况下更改此值。

我的应用程序已经使用Archaius。如果我使用我们的内部基础设施为此属性推送一个新值,我可以看到应用程序 Spring 环境确实收到了新值。(例如,/admin/env反映价值并动态变化)。

我不清楚的部分是:如何让我的服务对环境中价值的变化做出反应?

我找到了两种方法,但它们看起来很毛茸茸,我想知道是否有更好的选择。我预计这将成为 Spring 生态系统中一流解决方案的常见问题。

黑客解决方案#1:

@Bean
@Scope("prototype")
@ConfigurationProperties(prefix = "myapp.limits.queue")
QueueProperties queueProperties() {
    return new QueueProperties();
}
Run Code Online (Sandbox Code Playgroud)

并使用属性 as 将其注入服务Provider<QueueProperties>并将其用作queuePropertiesProvider.get().getMaxSize()

这有效,但有一些我不喜欢的副作用:

  • ConfigurationProperties注释从类移至 bean 定义
  • 为每个传入的请求创建一个新QueueProperties对象并将其绑定到值
  • 提供者可能会抛出get()
  • 在第一个请求到来之前不会检测到无效值

黑客解决方案#2:

不要用 …

java configuration spring spring-boot

5
推荐指数
0
解决办法
1961
查看次数

Java String getBytes非确定性

我无法弄清楚为什么在String上调用两次getBytes()会返回两个不相等的字节数组():

final String aString = "hello world";
System.out.println(aString.getBytes());
System.out.println(aString.getBytes());
System.out.println(aString.getBytes());
Run Code Online (Sandbox Code Playgroud)

打印:

[B@59887d29
[B@fd13cab
[B@71e606a9
Run Code Online (Sandbox Code Playgroud)

例如,以下断言总是失败:

Assert.assertEquals(aString.getBytes(), aString.getBytes());
Run Code Online (Sandbox Code Playgroud)

文档中,我没想到任何不确定性!我错过了什么?

转换回String时,结果是预期的结果,所以我最好的猜测是一些未初始化的填充位?

即以下断言总是通过:

Assert.assertEquals(new String(aString.getBytes()), new String(aString.getBytes()));
Run Code Online (Sandbox Code Playgroud)

java string serialization

2
推荐指数
1
解决办法
188
查看次数