以下是重现步骤:
minikube start
kubectl run nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=ClusterIP
kubectl run -i --tty --rm alpine --image=alpine --restart=Never -- sh
apk add --no-cache bind-tools
Run Code Online (Sandbox Code Playgroud)
现在让我们尝试查询 kibe-dns 的nginx服务
和nslookup:
/ # nslookup nginx.default 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: nginx.default.svc.cluster.local
Address: 10.97.239.175
Run Code Online (Sandbox Code Playgroud)
与dig:
dig nginx.default @10.96.0.10 any
; <<>> DiG 9.11.3 <<>> nginx.default @10.96.0.10 any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46414
;; flags: …Run Code Online (Sandbox Code Playgroud) 今天我从一些JS课程中学到了什么是memoization并尝试用Java实现它.我有一个简单的递归函数来评估第n个Fibonacci数:
long fib(long n) {
if (n < 2) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
Run Code Online (Sandbox Code Playgroud)
然后我决定使用HashMap来缓存递归方法的结果:
private static <I, O> Function<I, O> memoize(Function<I, O> fn) {
final Map<I, O> cache = new HashMap<>();
return in -> {
if (cache.get(in) != null) {
return cache.get(in);
} else {
O result = fn.apply(in);
cache.put(in, result);
return result;
}
};
}
Run Code Online (Sandbox Code Playgroud)
这按照我的预期工作,它允许我fib()像这样记忆memoize(this::fib)
然后,我用Google搜索记忆化的Java中的主题,发现了一个问题:Java的记忆化方法,其中computeIfAbsent提出比我的条件表达式短得多.
所以我期望工作的最终代码是:
public class FibMemo {
private …Run Code Online (Sandbox Code Playgroud) 尝试coreos/jetcd用于etcd从Java代码更新haproxy设置.
我想要实现的是:
我想通过前缀删除所有键,并将实际数据作为原子操作放入etcd中.
这就是我尝试使用etcd交易的原因.我的代码是:
Op.DeleteOp deleteOp = Op.delete(
fromString(prefix),
DeleteOption.newBuilder().withPrefix(fromString(prefix)).build()
);
Txn tx = kvClient.txn().Else(deleteOp);
newKvs.forEach((k,v) -> {
tx.Else(Op.put(fromString(k), fromString(v), DEFAULT));
});
try {
tx.commit().get();
} catch (InterruptedException | ExecutionException e) {
log.error("ETCD transaction failed", e);
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
使用ETCD v3 API(etcd v3.2.9).KVstore最初是空的,我想添加3条记录.
prefix价值是:
/proxy-service/hosts/example.com
Run Code Online (Sandbox Code Playgroud)
并且kvs是一张地图:
"/proxy-service/hosts/example.com/FTP/0" -> "localhost:10021"
"/proxy-service/hosts/example.com/HTTPS/0" -> "localhost:10443"
"/proxy-service/hosts/example.com/HTTP/0" -> "localhost:10080"
Run Code Online (Sandbox Code Playgroud)
异常发生在commit().get()以下根本原因:
Caused by: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: etcdserver: duplicate key given in txn request
at …Run Code Online (Sandbox Code Playgroud) 我使用杰克逊2.5.0。我想编写一个方法,它接受任意 JSON 字符串,并使用 Jackson 按字母顺序对每个属性进行排序。包括嵌套的。
我了解到 Jackson 的 ObjectMapper 有一个SORT_PROPERTIES_ALPHABETICALLY功能,我想使用它来实现我的目标。所以我基于这个想法的最初代码是:
class FooBar {
String foo
String bar
}
def sortFields(String source) {
def om = new ObjectMapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
def obj = om.readValue(source, Map.class)
return om.writeValueAsString(obj)
}
println sortFields('{"foo":"f","bar":"b"}')
Run Code Online (Sandbox Code Playgroud)
请注意,我无法提前知道输入 JSON 具有什么结构,因此 Jackson 默认将其解组Map(LinkedHashMap更准确地说)。我希望它输出一个字符串,其中键按字母顺序排序:
{"bar":"b","foo":"f"}
不幸的SORT_PROPERTIES_ALPHABETICALLY是,当要序列化的对象是Map. 如果我替换Map.class为FooBar.classJSON 属性,将按预期排序。但正如我所说,我无法提前知道输入 JSON 的类型,也无法在代码中为任何可能的类型创建一个类。对于杰克逊我还有什么其他选择?
我从SVN迁移到git,我在每个git提交中都有一个注释,引用了SVN版本号.在repo import之后我使用BFG repo清理器从二进制文件和其他垃圾中清除git历史记录.不幸的是现在我输入时没有注意到git log.我想BFG忘记更新笔记提交的引用.BFG以下列格式留下*.txt报告,将旧对象id映射到新对象id:
0001b24011381e8885683cd1119ba4cb077fa64b c81149b1b52b9e1e1767d6141f292891d715edb5
00024eecdc31f2f6e67018f7d6f00e7c1ad03f1f 326ee3b508e3dd2934ec1f50069195f86ea1a1c7
00028e04dcc2d59bd835b447bd3a207ae481696c 3d18e9b9d3336e59d62093200b81603ffefcc747
Run Code Online (Sandbox Code Playgroud)
在给出上述映射的情况下,您能否建议一些脚本快速修复注释?
PS:我几乎可以肯定问题是由于没有更新refs引起的,因为当我输入git notes第二名时,我可以看到在BFG报告中被认为是旧的引用object-id-map.old-new.txt
对于使用 Oracle OLTP 数据库作为数据源的现代后端 Java 应用程序,我应该使用哪一个?
对我来说 HikariCP 看起来像是现代 Java 应用程序事实上的标准池。但现在我需要维护一些过去的项目,该项目目前停留在 Oracle 驱动程序 v11 并使用 UCP。我现在想知道:Oracle的UCP比HikariCP有什么优势吗?您会使用 UCP 还是 HikariCP?
在start.spring.io生成的新 Spring Boot 项目将默认使用 HikariCP(尽管从 2.4 开始支持 UPC),直到您在 application.properties 中明确强制执行 UCP:
spring.datasource.type=oracle.ucp.jdbc.PoolDataSource
Run Code Online (Sandbox Code Playgroud)
Spring Boot 文档说:
1. We prefer HikariCP for its performance and concurrency. If HikariCP is available, we always choose it.
...
4. If none of HikariCP, Tomcat, and DBCP2 are available and if Oracle UCP is available, we use it.
Run Code Online (Sandbox Code Playgroud)
Oracle 网站包含有关如何将 UCP 与 …
我正在尝试解决使用 Java 17 运行时运行 Nexus IQ 扫描仪的问题。
错误是
java.lang.reflect.InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) 抛出 java.lang .ClassFormatError 可访问:模块 java.base 不会向未命名模块“打开 java.lang”@7225790e
所以我尝试将--add-opens java.base/java.lang=ALL-UNNAMED修复传递给运行的 JVM nexus-iq-cli.jar。
不幸的是,我无法完全控制java -jar ...在 CI 上执行的命令,否则我只会--add-opens java.base/java.lang=ALL-UNNAMED显式地传递。由于该限制,我尝试使用其他一些方法来设置全局 JVM 参数设置。我想到的一种方法是使用_JAVA_OPTIONS环境变量。
令我惊讶的是 Java 因错误而退出:
无法识别的选项:--add-opens
当我尝试按如下方式传递时:
# with unix shell you can set value to some variable and execute something in one line
_JAVA_OPTIONS='--add-opens java.base/java.lang=ALL-UNNAMED' java
Run Code Online (Sandbox Code Playgroud)
另一方面,当我直接传递此选项时,Java 完全正常并且按预期运行:
java --add-opens java.base/java.lang=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
--add-opens java.base/java.lang=ALL-UNNAMED如果我无法直接控制java -jarCI 执行 Nexus IQ 扫描步骤的命令,我缺少什么以及传递参数的其他可能方法是什么?
以下方法使用Java进行编译:
public class Main {
public static void main(String[] args) {
varargMethod(1, 2.0);
}
static void varargMethod(Number... va) {
arrayMethod(va);
}
static void arrayMethod(Number[] arr) {
for (Number number : arr) {
System.out.println(number);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试在Kotlin中编写类似的代码,则会出现类型不匹配错误:
fun main() {
varargFun(1, 2.0)
}
fun varargFun(vararg va: Number) {
arrayFun(va) // Error:(6, 14) Kotlin: Type mismatch: inferred type is Array<out Number> but Array<Number> was expected
}
fun arrayFun(arr: Array<Number>) {
arr.forEach {
println(it)
}
}
Run Code Online (Sandbox Code Playgroud)
我期望va是这样的Array<String>,但是是Array<out …
将 cache2k 添加到我的项目后, some 因@SpringBootTest错误而停止工作:
java.lang.IllegalStateException:缓存已经创建:'缓存'
下面我提供了重现的最小示例:
前往 start.spring.io 并使用 Cache starter 创建一个最简单的 Maven 项目,然后添加 cache2k 依赖项:
<properties>
<java.version>1.8</java.version>
<cache2k-version>1.2.2.Final</cache2k-version>
</properties>
<dependencies>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-api</artifactId>
<version>${cache2k-version}</version>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-core</artifactId>
<version>${cache2k-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-spring</artifactId>
<version>${cache2k-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
现在配置最简单的缓存:
@SpringBootApplication
@EnableCaching
public class CachingDemoApplication {
public static void main(String[] args) {
SpringApplication.run(CachingDemoApplication.class, args);
}
@Bean
public CacheManager springCacheManager() {
SpringCache2kCacheManager cacheManager = new SpringCache2kCacheManager();
cacheManager.addCaches(b -> b.name("cache"));
return …Run Code Online (Sandbox Code Playgroud)