如果在Java中使用以下"idiom",例如从这个答案.
while (!Thread.currentThread().isInterrupted()) {
try {
Object value = queue.take();
handle(value);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
Run Code Online (Sandbox Code Playgroud)
如果take是一个阻塞操作,如果在检查Thread.currentThread().isInterrupted()和呼叫之间有一个中断"到达",那么暂时不能忽略一个中断queue.take()吗?这不是"检查而非行动"的操作吗?如果是这样,如果线程被中断,它是否可以保证在任何情况下都保留循环?
可以使用 带超时的轮询,以便在超时后保留循环,但是是否可以检查中断状态并以原子方式对其进行操作?
我有以下配置(对于 Angular 应用程序):
location / {
try_files $uri /index.html;
add_header "Cache-Control" "no-cache" ;
}
Run Code Online (Sandbox Code Playgroud)
现在我想仅为index.html,但不为任何其他文件添加该标头。怎么做?
我对Wildfly Swarm项目感兴趣,以创建fat-jar JavaEE应用程序,但无法弄清楚如何从IDE"热部署"更改的类.
每当我更改一行代码或JSF xhtml文件时,我当前必须重新启动整个应用程序需要大约7秒左右.那不是很有成效.
Spring Boot提供了一个spring-boot-devtools,可以重新加载至少一些类,传统的应用服务器提供热部署协议.Wildfly Swarm还有类似的东西吗?JRebel会帮忙吗?
首先,我必须说我对反应式编程没有多少经验.
由于JDK 9(Flow及其嵌套接口)中只有少数接口,因此JDK 9显然不包含像RxJava这样的反应库.
在Javadoc,有对的implentations一些例子Publisher,Subscription和Subscriber.但这些似乎相当低级,没有任何反应操作员或处理背压.
那么将这些接口包含在JDK中有什么意义呢?
反应库的供应商是否应该使用它们,以便那些Java实现(如RxJava)使用一组通用的接口?(类似于JPA和Hibernate?)
我有一些网络服务(JAX-RS、WildFly 9、Resteasy)
@RequestScoped
public class SomeService{
// operations
}
Run Code Online (Sandbox Code Playgroud)
现在我想提取上下文信息,例如用户代理,这可以使用
@Context
private HttpHeaders httpHeaders;
Run Code Online (Sandbox Code Playgroud)
似乎只能在 JAX-RS 相关类中注入此上下文,但不能在 Web 服务调用的 CDI bean 中注入。可以将其放入 Web 服务中,但这会使服务与与服务的核心响应无关的内容变得混乱。
经过一番搜索,我最终使用了javax.ws.rs.ext.Provider注释。看起来生成的ContextInformation对象可以在其他 CDI-bean 中使用,而不仅仅是在 JAX-RS bean 中。
@Provider
public class ContextInformationProducer {
@Produces
@RequestScoped
public ContextInformation create() {
ContextInformation contextInformation = new ContextInformation();
contextInformation.setBrowserUserAgent(httpHeaders.getHeaderString("User-Agent"));
}
Run Code Online (Sandbox Code Playgroud)
问题是这是否是好的做法?或者这只是巧合?如果这不是好的做法,我怎样才能以更好的方式做到这一点?查看JAX-RS 中的 Provider 是什么意思?,我不确定我是否在“扩展和定制 JAX-RS 运行时”。应用程序开发人员应该使用它吗?
我有一些使用 Java EE 的服务ManagedExecutorService(在 Wildfly 9 中)
public class FooService{
@Resource
ManagedExecutorService executorService;
}
Run Code Online (Sandbox Code Playgroud)
对于 Mockito 的测试,我想使用“正常” ExecutorService
@RunWith(MockitoJUnitRunner.class)
public class FooServiceTest{
@Spy
ManagedExecutorService executorService = Executors.newFixedThreadPool(5);
}
Run Code Online (Sandbox Code Playgroud)
这段代码显然无法编译,因为 anExecutorService不是ManagedExecutorService.
当使用ExecutorService在服务上,没有错误的测试运行,但随后Wildfly不能注入服务。
public class FooService{
@Resource
ExecutorService executorService;
}
@RunWith(MockitoJUnitRunner.class)
public class FooServiceTest {
@Spy
ExecutorService executorService = Executors.newFixedThreadPool(5);
}
Run Code Online (Sandbox Code Playgroud)
可以ManagedExecutorService通过委托给 a来创建a ExecutorService:
@Spy
ManagedExecutorService executorService = new ManagedExecutorService() {
ExecutorService executorService = Executors.newFixedThreadPool(5);
@Override
public void shutdown() {
executorService.shutdown(); …Run Code Online (Sandbox Code Playgroud) 在试验时CompletableFuture,我想知道给定的代码是否安全.
CompletableFuture<Integer> foo = CompletableFuture.supplyAsync(() -> 42);
foo.thenApply((bar) -> {
System.out.println("bar " + bar);
return bar;
})
.acceptEither(foo.thenApply((baz) -> {
System.out.println("baz " + baz);
return baz;
}),
(z) -> System.out.println("finished processing of " + z));
Run Code Online (Sandbox Code Playgroud)
它有效,印刷
bar 42
baz 42
finished processing of 42
Run Code Online (Sandbox Code Playgroud)
thenApply在给定的实例上多次调用或其他方法是安全的/好主意CompletableFuture吗?
我有一个剧本包括:
- include: include1.yml
when: doinclude | default('true')
- include: include2.yml
when: doinclude | default('true')
Run Code Online (Sandbox Code Playgroud)
有没有可能不重复这个条件?我试过块,但似乎块不能在这种情况下使用:
- block:
- include: include1.yml
- include: include2.yml
when: doinclude | default('true')
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我也尝试了类似的东西
- name: test
hosts: all
tasks:
- block:
- include: include1.yml
- include: include2.yml
when: doinclude | default('true')
Run Code Online (Sandbox Code Playgroud)
这也行不通
我是 Java8 的新手。我要解决的一个问题是使用 Stream 将 Map> 转换为 Map。例如:
input: {A => [B, C, D], E => [F]}
output: {B => A, C => A, D => A, F => E}
Run Code Online (Sandbox Code Playgroud)
假设 List 中没有重复值。如何在java 8流中以优雅的方式做到这一点?
干杯,魏
给定一个带有 final 字段的简单类,例如 a String(参见下面的示例)或 Spring 依赖项,使用 Java 14 记录使其更简洁并可能删除 Lombok 等注释处理器是个好主意吗?
根据JEP描述记录,“记录使语义声明成为其数据的简单、透明的持有者”。
显然,只有 final 字段的泛型类并不是其数据的透明持有者,并且在使用记录时,其final变量是公开的,这可能是不可取的。但是,在许多情况下,这可能不是主要问题。
因此,这是否“足以”将其视为对该语言功能的“滥用”?或者还有其他不那么明显的缺点吗?
@RequiredArgsConstructor // or an explicit constructor when not using lombok
class AudienceValidator implements OAuth2TokenValidator<Jwt> {
private final String audience;
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
record AudienceValidator(String audience) implements OAuth2TokenValidator<Jwt> {
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
Run Code Online (Sandbox Code Playgroud) java ×7
wildfly ×3
concurrency ×2
java-8 ×2
ansible ×1
ansible-2.x ×1
cdi ×1
http-headers ×1
ide ×1
interrupt ×1
jakarta-ee ×1
java-14 ×1
java-9 ×1
java-ee ×1
java-record ×1
java-stream ×1
jax-rs ×1
mockito ×1
nginx ×1
resteasy ×1
rx-java ×1