小编cod*_*ith的帖子

Spring Data REST如何内联添加嵌入式资源

我正在将Spring Data REST和Hateoas与HAL浏览器结合使用.这很好用,但现在我想用一组特定的实体和一组相关的对象进行JSON转储.我用过@Projection但后来又卡死了.

仅供参考:正常行为(包含嵌入式和链接等)应保留在新端点之外(没有嵌入式和链接).

为了进一步说明我的问题/问题:

class Person {
  String name;
  List<Company> companies;
}

class Company {
  String name;
  Address address;
}

class Address {
  String street;
}
Run Code Online (Sandbox Code Playgroud)

现在我想看到这样的事情:

{
   "name": "John",
   "companies": [
        {
            "name": "Stackoverflow",
            "address": {"street": "Highway blvd."}
        },
        {
            "name": "Oracle",
            "address": {"street": "Main rd."}
        }
   ]
}
Run Code Online (Sandbox Code Playgroud)

虽然我得到了这个:

{
   "name": "John",
   "_links": {
        "self": {"href": "http...."},
        "companies": {"href": "http ..."}
   },
}
Run Code Online (Sandbox Code Playgroud)

另见:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts

在我的例子中,我介绍了我遇到的两个困难:列表(公司)和多个级别:人员 - >公司 - >地址.两者都需要工作(可能有5个级别,其中一些级别有"很多"关系).

java rest spring hateoas spring-data-rest

10
推荐指数
2
解决办法
7044
查看次数

向Spring Boot应用程序添加其他参数

我想知道是否可以添加spring的附加参数,例如-Dspring.profiles.active=prod弹簧启动应用程序,以防将其作为服务运行.

我检查了自动生成的脚本spring-boot-maven-plugin:

command="$javaexe -jar -Dsun.misc.URLClassPath.disableJarChecking=true $jarfile $@"

也许它可以通过maven插件的选项完成,但除了JVM参数之外找不到任何不太有用的...

service spring init.d maven spring-boot

8
推荐指数
2
解决办法
3435
查看次数

多 WAR tomcat 与 Docker 容器

我想知道 Docker 解决方案是否比我当前的 Tomcat 部署更快、内存效率更高。我将解释这两种解决方案。

当前:我有一个部署了大约 20 个 WAR 的 Tomcat 服务器。WAR 是 Spring Boot 应用程序。它也占用大量内存、启动时间和金钱。

docker 替代方案:我正在考虑的替代方案是带有 20 个 docker 容器的 docker 主机,每个应用程序一个。Spring 似乎建议在 JDK 映像上使用 JAR。

现在,Docker 或一般的容器化是否可以提高内存和速度?

我期待的一项改进是应用程序可以并行启动。这有望加快启动时间(假设是多核硬件)。我就在这里吗?

其次,我想知道哪种方法可以最有效地处理内存。当我有多个 WAR 共享完全相同的依赖项时会发生什么?Tomcat 会为此重用依赖内存吗?Docker 会吗?

java performance spring tomcat docker

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

env.BRANCH_NAME成为PR-1

我们使用Jenkins管道和Github Multibranch。

我在一个名为的功能分支上工作feature/my1stfeature。Jenkins作业返回了正确的分支名称:

println(env.BRANCH_NAME)返回feature/my1stfeature

但是,一旦我在Github中创建了我的第一个请求请求

println(env.BRANCH_NAME)返回PR-01

我当然想要功能分支的名称。

如何解决呢?

github jenkins jenkins-pipeline

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

如何在Spring Integration中实现这个TCP流读取器?

我想要一个流读取器的 Spring Integration 实现。另一个应用程序(java 之外)将数据流(由美元符号分隔)发送到端口 9999。该服务器侦听

首先,我通过使用连接来确保流正在流式传输telnet 127.0.0.1 9999

然后我使用以下方法创建了一个简单的java应用程序。目前正在运行。

public void readStream() throws IOException{
    Scanner s = null;
    try {
        Socket skt = new Socket("localhost", 9999);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(
                        skt.getInputStream()));
        s = new Scanner(bufferedReader);
        s.useDelimiter("[$]");
        System.out.println(s);
        while (s.hasNext()) {
            System.out.println("----------------------");
            System.out.println(s.next());
        }
    } finally {
        if (s != null) {
            s.close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在 Spring Integration 框架中实现这一点。我查看了https://github.com/spring-projects/spring-integration-samples/tree/master/basic/tcp-client-serverhttp://docs.spring.io/autorepo/docs/spring-integration /2.0.0.M3/spring-integration-reference/html/stream.html。但我很困惑从哪里开始?连接到发送应用程序需要什么?(我对 Spring 框架真的很陌生。)

对我来说,困难在于术语。我应该创建 TCP 入站网关吗?或者接收通道适配器?或者是出站,因为我正在请求流?

加里评论后编辑:

<bean …
Run Code Online (Sandbox Code Playgroud)

java streaming spring tcp spring-integration

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

在单元测试中禁用JMS使用bean

我构建了一个接收JMS消息(@JmsListener)的Spring应用程序.在开发期间,我想将一些消息发送到侦听器侦听的JMS队列,因此我编写了一个发送一些消息的单元测试(JmsTemplate).在这个单元测试中,我使用@SpringBootTest@RunWith(SpringRunner.class)加载应用程序上下文(数据源的bean等).

但是,当单元测试开始时,它还会加载jms监听器bean,它直接开始使用我的新消息.

我想在此测试场景中禁用此jms侦听器bean,以便将消息添加到队列中.然后,我可以启动主应用程序并观察它们被消耗.

我该怎么做呢?

我想我也可以问一下如何禁用bean.

提前致谢.

java spring unit-testing jms javabeans

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

Tomcat:1次战争,部署2次,2次配置

简化情况:

  • 我有1个Tomcat容器和1个使用数据库的WAR.
  • 数据库配置位于属性文件中(战争中).
  • 我将WAR部署了2次,在contextpath上部署了一个webapp,在contextpath上部署了/a一个webapp /b.
  • 这两个webapps 现在指向同一个数据库(相同的cfg).

我想要的是每个webapp指向不同的数据库.因此,/a指向数据库A的webapp和/b指向数据库B的指向webapp .

你怎么解决这个问题?(没有分裂战争本身)

java tomcat configuration-files

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

在代理中转发主机名和路径

我有一个外部服务:

https://domainx.com/path/a/to/my/app
Run Code Online (Sandbox Code Playgroud)

通过代理和 Web 服务,它最终出现在 Tomcat 服务器上的 Spring(Data Rest)应用程序中,暴露在以下位置:

http://mytomcatserver:8080/this/is/my/app
Run Code Online (Sandbox Code Playgroud)

该应用程序返回一个 HAL-JSON 响应,其中包含一个_links部分,指向其自身和其他资源。例如:

{
    "id": "a_resource_001",
    "_links": {
        "self": {
            "href": "http://mytomcatserver:8080/this/is/my/app/res/a_resource_001"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在消费方面,这个链接当然没有任何意义。

这个问题已经解决:在消费端,在某处添加了一个标头:

X-Forwarded-Host=domainx.com
Run Code Online (Sandbox Code Playgroud)

然后结果变成了(自动感谢框架):

{
    "id": "a_resource_001",
    "_links": {
        "self": {
            "href": "https://domainx.com/this/is/my/app/res/a_resource_001"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

链接已改进,但路径/上下文根仍然不匹配:

/path/a/to/my/app!= /this/is/my/app

所以,我想,是否有 X 转发路径或类似的东西。我的应用程序框架(Tomcat、Spring 或 Spring Data Rest)拾取一些标头,并用于在 JSON 响应中构建 url。但没有,没有找到。

有人知道如何解决此类问题。在我看来,我不是第一个处理这种事情的人。

哦,是的,在这种情况下使用相同的路径不是一个选项。(当然,如果我将应用程序的上下文根公开为/path/to/my/app,它会起作用。在这种情况下不是一个选项)

我想 Tomcat/Spring 中有一个解决方案,其中某些标头可能会影响链接。但我也认为这可以在网络服务器(apache)或代理设置中解决。

apache proxy spring tomcat http-headers

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

CompletableFuture:如何将函数应用于多个CompletableFutures?

假设我有3个下载,框架为可完成的期货:

    CompletableFuture<Doc> dl1 = CompletableFuture.supplyAsync(() -> download("file1"));
    CompletableFuture<Doc> dl2 = CompletableFuture.supplyAsync(() -> download("file2"));
    CompletableFuture<Doc> dl3 = CompletableFuture.supplyAsync(() -> download("file3"));
Run Code Online (Sandbox Code Playgroud)

然后所有这些都需要以相同的方式处理

    CompletableFuture<String> s1 = dl1.thenApply(Doc::getFilename);
    CompletableFuture<String> s2 = dl2.thenApply(Doc::getFilename);
    CompletableFuture<String> s3 = dl3.thenApply(Doc::getFilename);
Run Code Online (Sandbox Code Playgroud)

您可以想象要应用的多个功能,所有功能都是并行的.

根据DRY原则,这个例子似乎不合适.所以我正在寻找一种解决方案来定义仅执行3次并行执行的工作流程.

如何实现这一目标?

我尝试过allOf,但这有两个问题:1)它开始阻塞,2)返回类型只能run填充而不是处理它.

java concurrency java.util.concurrent java-8 completable-future

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

Kubernetes:在没有资源限制的情况下调度 Pod

Kubernetes:当 Pod 没有定义资源限制/请求时会发生什么?

当 Pod 没有(或只有部分)定义资源限制/请求时,它可以在 Kubernetes (GKE) 中使用多少资源?

例如,我有一个只有内存限制和内存请求的 pod ,但它没有 CPU 规格。此 pod 可用的 CPU 是否为:

  • 0
  • 节点/命名空间上剩余的数量(总计减去所有其他 pod 声明)
  • 尽可能多地了解节点/命名空间上其他 pod 的实际使用情况

kubernetes google-kubernetes-engine

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