我正在将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个级别,其中一些级别有"很多"关系).
我想知道是否可以添加spring的附加参数,例如-Dspring.profiles.active=prod弹簧启动应用程序,以防将其作为服务运行.
我检查了自动生成的脚本spring-boot-maven-plugin:
command="$javaexe -jar -Dsun.misc.URLClassPath.disableJarChecking=true $jarfile $@"
也许它可以通过maven插件的选项完成,但除了JVM参数之外找不到任何不太有用的...
我想知道 Docker 解决方案是否比我当前的 Tomcat 部署更快、内存效率更高。我将解释这两种解决方案。
当前:我有一个部署了大约 20 个 WAR 的 Tomcat 服务器。WAR 是 Spring Boot 应用程序。它也占用大量内存、启动时间和金钱。
docker 替代方案:我正在考虑的替代方案是带有 20 个 docker 容器的 docker 主机,每个应用程序一个。Spring 似乎建议在 JDK 映像上使用 JAR。
现在,Docker 或一般的容器化是否可以提高内存和速度?
我期待的一项改进是应用程序可以并行启动。这有望加快启动时间(假设是多核硬件)。我就在这里吗?
其次,我想知道哪种方法可以最有效地处理内存。当我有多个 WAR 共享完全相同的依赖项时会发生什么?Tomcat 会为此重用依赖内存吗?Docker 会吗?
我们使用Jenkins管道和Github Multibranch。
我在一个名为的功能分支上工作feature/my1stfeature。Jenkins作业返回了正确的分支名称:
println(env.BRANCH_NAME)返回feature/my1stfeature。
但是,一旦我在Github中创建了我的第一个请求请求
println(env.BRANCH_NAME)返回PR-01。
我当然想要功能分支的名称。
如何解决呢?
我想要一个流读取器的 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-server和http://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) 我构建了一个接收JMS消息(@JmsListener)的Spring应用程序.在开发期间,我想将一些消息发送到侦听器侦听的JMS队列,因此我编写了一个发送一些消息的单元测试(JmsTemplate).在这个单元测试中,我使用@SpringBootTest和@RunWith(SpringRunner.class)加载应用程序上下文(数据源的bean等).
但是,当单元测试开始时,它还会加载jms监听器bean,它直接开始使用我的新消息.
我想在此测试场景中禁用此jms侦听器bean,以便将消息添加到队列中.然后,我可以启动主应用程序并观察它们被消耗.
我该怎么做呢?
我想我也可以问一下如何禁用bean.
提前致谢.
简化情况:
/a一个webapp /b.我想要的是每个webapp指向不同的数据库.因此,/a指向数据库A的webapp和/b指向数据库B的指向webapp .
你怎么解决这个问题?(没有分裂战争本身)
我有一个外部服务:
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)或代理设置中解决。
假设我有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
Kubernetes:当 Pod 没有定义资源限制/请求时会发生什么?
当 Pod 没有(或只有部分)定义资源限制/请求时,它可以在 Kubernetes (GKE) 中使用多少资源?
例如,我有一个只有内存限制和内存请求的 pod ,但它没有 CPU 规格。此 pod 可用的 CPU 是否为:
java ×6
spring ×6
tomcat ×3
apache ×1
concurrency ×1
docker ×1
github ×1
hateoas ×1
http-headers ×1
init.d ×1
java-8 ×1
javabeans ×1
jenkins ×1
jms ×1
kubernetes ×1
maven ×1
performance ×1
proxy ×1
rest ×1
service ×1
spring-boot ×1
streaming ×1
tcp ×1
unit-testing ×1