在我的组织内部,我受到IT安全机构的严格监管.因此,禁止所有访问maven镜像.但是,我可以提供我需要的依赖项的详细信息,以便IT安全人员可以执行其检查/扫描,并希望为我下载二进制文件.
然后我在我的本地maven repo中安装这些,这意味着它们可以在防火墙内免费提供给我的团队.
maven的美妙之处在于它可以识别和下载传递依赖.但是,如果无法访问外部POM文件,我无法通过maven dependency:tree执行这些检查.
因此,我必须一次一个地向IT部门提供依赖项.鉴于某些依赖链的深度,这可能需要相当长的时间才能回归/转发IT.或者,我在家里做依赖:树,并自己邮寄结果.
我想知道是否有人对我可以查询此信息的网站有任何建议?所以,如果我想(比如)log4j:1.2.17,它会告诉我我还需要请求javax.mail:mail:1.4.3.
我一直在使用CompletableFuture.allOf(...)帮助程序来创建汇总期货,这些期货只有在其复合期货标记为已完成时才会变为“完成”,即:
CompletableFuture<?> future1 = new CompletableFuture<>();
CompletableFuture<?> future2 = new CompletableFuture<>();
CompletableFuture<?> future3 = new CompletableFuture<>();
CompletableFuture<?> future = CompletableFuture.allOf(future1, future2, future3);
Run Code Online (Sandbox Code Playgroud)
我希望对此功能稍作更改,在以下情况下,总的未来市场是完整的:
在后一种情况下,合计期货应立即(例外)完成,而不必等待其他期货完成(即快速失败)。
为了说明这一点,请CompletableFuture.allOf(...)考虑一下:
// First future completed, gotta wait for the rest of them...
future1.complete(null);
System.out.println("Future1 Complete, aggregate status: " + future.isDone());
// Second feature was erroneous! I'd like the aggregate to now be completed with failure
future2.completeExceptionally(new Exception());
System.out.println("Future2 Complete, aggregate status: " + future.isDone());
// Finally complete …Run Code Online (Sandbox Code Playgroud) 初学者的问题;Docker 在使用命令时如何处理底层操作系统的变化RUN?
我们以一个非常简单的JRE 1.8官方 Docker Hub Dockerfile 为例。在安装 java 包时,Dockerfile 使用apt-get:
RUN apt-get update && apt-get install -y --no-install-recommends ...
Run Code Online (Sandbox Code Playgroud)
对于未经训练的人来说,这似乎是特定于平台的指令,仅适用于基于 Debian 的操作系统(或至少安装了 APT 的操作系统)。
这在 CentOS 安装上到底如何工作,例如,包管理器在哪里yum?或者上帝保佑,像Solaris这样的东西。
如果这种使用 fork 任意 shell 命令的模式RUN在 docker 中很普遍,那么如何避免平台间甚至版本间的依赖关系呢?
即,如果 Dockerfile 编写者拥有比我更新的版本grep,并且他们使用了一些早期版本中不可用的新 CLI 标志,该怎么办?
唯一的两个结果可能是:(1) RUN 命令以非零退出代码退出 (2) Dockerfile 在运行命令之前更改了 grep 的安装版本。
使用该@angular/router版本3.0.0-beta.2我想构建一个允许我的用户浏览文件系统的应用程序.
以下说明了我想支持的URL类型:
http://myapp/browse <--- Browse without parameters, lists root dir
http://myapp/browse/animals <--- Browse "animals" subdirectory
http://myapp/browse/animals/mammals <--- Browse "animals/mammals" subdirectory
Run Code Online (Sandbox Code Playgroud)
我正在努力想出一个使用它来配置它的机制RouterConfig.
{ path: 'browse/:path', component: BrowserComponent }
Run Code Online (Sandbox Code Playgroud)
这RouterConfig仅支持单个子目录,即browse/animals.但是,如果我尝试浏览到第二级子目录,/browse/animals/mammals我会收到以下错误:
Error: Cannot match any routes: '/browse/animals/mammals'
Run Code Online (Sandbox Code Playgroud)
我知道路由器中参数的默认行为(在这种情况下:path)是在第一个正斜杠上"中断",并假设以下标记是子路径.
如何配置路由器以允许:path参数接受正斜杠/"gobble"整个剩余的URL作为参数?
如何处理用户希望浏览根目录(即URL)的用例/browse.这与上述路由器配置不匹配,因为:path参数不存在.
我试图使用两个明确配置的路由器路径来解决这个问题:
{ path: 'browse', component: BrowserComponent },
{ path: 'browse/:path', component: BrowserComponent }
Run Code Online (Sandbox Code Playgroud)
但是,这引起了我的问题routerLinkActive.我有一个主菜单,其中包含指向浏览器的链接,如下所示:
<a [routerLink]="['/browse']" [routerLinkActive]="['active']">...</a>
Run Code Online (Sandbox Code Playgroud)
active如果用户浏览到根目录 …
我正在尝试开始使用elasticsearch(一直是一个长期的指南针用户)而且我在基础知识方面遇到了一些相当严重的问题,这非常令人沮丧.
我面临的当前问题是,在节点关闭之后,索引数据才会显示.这是我的代码示例
Node node = nodeBuilder().node();
Client client = node.client();
client.prepareIndex("index1", "type1", "1").setSource("{ \"name\": \"Aaron\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "2").setSource("{ \"name\": \"Andrew\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "3").setSource("{ \"name\": \"Alistair\"}").execute().actionGet();
QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name", "a*");
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index1");
searchRequestBuilder.setTypes("type1");
searchRequestBuilder.setSearchType(SearchType.DEFAULT);
searchRequestBuilder.setQuery(queryBuilder);
SearchResponse response = searchRequestBuilder.execute().actionGet();
System.out.println("Response contains " + response.getHits().totalHits() + " hits");
for (SearchHit currentHit : response.getHits())
{
System.out.println(currentHit.getSourceAsString());
}
client.close();
node.close();
Run Code Online (Sandbox Code Playgroud)
我第一次运行它时,它在搜索中找不到匹配.但是,如果我再次运行它 - 它确实找到所有以字母"A"开头的名称(不要让我开始自动降低索引项目,但不是搜索 - 这花了我一个多小时).
如果我卸下收盘,我运行上面多少次并不重要我从来没有找到结果.但是,如果我添加close语句,它会第二次(每次).
感觉就像没有刷新的缓冲索引更改有关吗?
我确信我遗漏了一些明显和基本的东西.但我不能把手指放在上面.
我想用Jackson来序列化流的输出.杰克逊没有对序列化的内在支持java.util.stream.Stream,但它能够序列化java.util.Iterator.
为了说明这个问题,我想序列化这个简单的界面:
public interface SerializeMe {
Iterator<Integer> getMyNumbers();
}
Run Code Online (Sandbox Code Playgroud)
我将比较序列化List.iterator()与输出的输出Stream.iterator():
public class SerializeViaList implements SerializeMe {
@Override
public Iterator<Integer> getMyNumbers() {
return Arrays.asList(1, 2, 3).iterator();
}
}
public class SerializeViaStream implements SerializeMe {
@Override
public Iterator<Integer> getMyNumbers() {
return Arrays.asList(1, 2, 3).stream().iterator();
}
}
Run Code Online (Sandbox Code Playgroud)
以下方法将演示这两个类的输出:
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
System.out.println("via list: " + mapper.writeValueAsString(new SerializeViaList()));
System.out.println("via stream: " + mapper.writeValueAsString(new SerializeViaStream()));
}
Run Code Online (Sandbox Code Playgroud)
这个输出是: …
如果可以将 path: ' ' 重定向到 path: ':id' ,我正在徘徊?有没有办法实现这一目标?
谢谢你。
{
path: 'folder',
children: [
{
path: '',
redirectTo: ':id',
pathMatch: 'full',
},
{
path: ':id',
canActivate: [AuthGuard],
component: DocumentsComponent,
},
]
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个Oracle数据库,其中有一个表,RUN_LOG我正在使用它来记录作业执行的时间.
该表具有JOB_NAME唯一标识已执行作业的主键,以及一个LAST_RUN_TIMESTAMP在上次执行作业时反映的列.
作业启动时,我想更新作业的现有行(如果存在),或者在表中插入新行.
鉴于Oracle不支持a- REPLACE INTOstyle查询,有必要尝试一个UPDATE,如果零行受到影响,请使用INSERT.
这通常通过jdbc使用以下内容实现:
PreparedStatement updateStatement = connection.prepareStatement("UPDATE ...");
PreparedStatement insertStatement = connection.prepareStatement("INSERT ...");
updateStatement.setString(1, "JobName");
updateStatement.setTimestamp(2, timestamp);
// If there are no rows to update, it must be a new job...
if (updateStatement.executeUpdate() == 0) {
// Follow-up
insertStatement.setString(1, "JobName");
insertStatement.setTimestamp(2, timestamp);
insertStatement.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)
这是一条相当完善的道路,我对这种方法非常满意.
但是,我们假设我的用例要求我插入大量的这些记录.对数据库执行单独的SQL查询将太"唠叨".相反,我想开始批处理这些INSERT/ UPDATE查询
鉴于UPDATE查询的执行将被推迟到批处理提交之前,我无法观察到在以后的日期有多少行受到影响.
实现这种REPLACE INTO结果的最佳机制是什么?
我宁愿避免使用存储过程,因为我更喜欢将持久性逻辑保留在这个地方(类),而不是在Java代码和数据库之间分配.
使用git存储库管理器(如GitHub,GitLab等)时,克隆项目的说明将远程的SSH连接说明为:
git@github.com:xxxx/yyyy.git
Run Code Online (Sandbox Code Playgroud)
为什么这些存储库管理员要求使用git用户名(如git@github.com),而不是使用我的特定用户名?
在验证我的请求时,必须针对所有用户的Universe检查我的公钥/私钥auth?