在IntelliJ中,我可以通过按⌘+ Shift+ ↑(或⌘+ Shift+ ↓)轻松地重新排列语句的顺序(或该部分的整个方法).
我想知道是否有一个快捷方式可以很容易地改变方法参数的顺序,所以
public void sth(String a, String b) {...}
Run Code Online (Sandbox Code Playgroud)
会变成
public void sth(String b, String a) {...}
Run Code Online (Sandbox Code Playgroud)
使用键盘快捷键的笔划(假设我的光标位于其中一个参数上).
如果IntelliJ只重新排序参数,那对我来说已经足够了.也就是说,这不需要触发整个Refactor> Change方法签名的事情.
我正在使用Spring Data JPA(Hibernate作为我的JPA提供程序)并且想要定义exists
附加了HQL查询的方法:
public interface MyEntityRepository extends CrudRepository<MyEntity, String> {
@Query("select count(e) from MyEntity e where ...")
public boolean existsIfBlaBla(@Param("id") String id);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,我得到了一个java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Boolean
.
HQL查询如何使其工作?我知道我可以简单地返回一个Long值,然后检查我的Java代码是否count > 0
,但是这个解决方法不应该是必要的,对吧?
我知道之前已经问过这个问题,但是我还没有确定哪个PDF生成框架可用于我当前的项目.
我的要求
很多人似乎都在使用iText,但我对关注点分离有一些担忧(除了更改的许可证):在HTML上下文中有很好的MVC支持,我通常坚持使用Spring MVC和FreeMarker来分离逻辑和布局.我有点担心,使用iText,你最终会混合代码和布局.
我知道,Apache FOP在这里可能是一个解决方案,但是我再次发现XSLT很繁琐,而且我读到FOP在许多文档的大量组合中可能会很慢?
我也考虑过JasperReports,但根据我的理解,这更适合包含表格数据集的报告而不是单个文档,例如需要大量布局格式的发票?
有什么想法吗?
Stderr和stdout消息显示在IntelliJ IDEA中的同一控制台日志中(通常为黑色和红色).是否有一种简单的方法来抑制stderr或stdout消息或将两个不同的流重定向到不同的控制台窗口?
我正在使用HQL命名查询(在XML文件中定义)来使用Hibernate查询我的数据库.有些查询非常复杂,我发现自己将一个查询的大部分内容复制粘贴到另一个查询,类似的查询.
我想知道是否有可能在"命名查询片段"中定义公共部分并在我的所有查询中重用该片段?
我不想使用标准API,顺便说一句,因为我觉得在XML中制定查询更加舒服.其中一些已经是一个非常怪物,用API实现它们会使它们更加难以理解.
有什么区别:
在 Builder 上首次测试运行:
Predicate predicate = root.get(PersonEntity_.name).in(names);
criteriaBuilder.not(predicate);
Run Code Online (Sandbox Code Playgroud)
对查询运行第二次测试:
Predicate predicate2 = root.get(PersonEntity_.name).in(names).not();
criteriaQuery.where(predicate2);
Run Code Online (Sandbox Code Playgroud)
这似乎给出了相同的结果。我错过了什么吗?我们应该选择 CriteriaBuilder 之上的 CriteriaQuery 吗?
完整示例:
List<String> names = new ArrayList<String>();
names.add("John");
names.add("Emma");
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<PersonEntity> criteriaQuery = criteriaBuilder.createQuery(PersonEntity.class);
Root<PersonEntity> root = criteriaQuery.from(PersonEntity.class);
// First test run on the Builder
Predicate predicate = root.get(PersonEntity_.name).in(names);
criteriaBuilder.not(predicate);
// Second test run the query
// Predicate predicate2 = root.get(PersonEntity_.name).in(names).not();
// criteriaQuery.where(predicate2);
List<PersonEntity> list = entityManager.createQuery(cq).getResultList();
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个纯Java CSS spriting库,我可以将其集成到我的Maven构建中,这样就可以为每个新构建自动完成spriting.(我目前正在使用http://code.google.com/p/wro4j/进行JavaScript和CSS最小化)
我首先考虑了http://csssprites.org/,但需要CSS注释工作有点让我失望.那里还有其他图书馆我应该看看吗?
通过调用Flux.push
和使用push
lambda 表达式中的接收器直接创建 Flux与使用由 a 提供的接收器有DirectProcessor
什么区别?
在 Flux 只发出几个事件的最小示例中,我可以做
Flux.<String>push(emitter -> {
emitter.next("One");
emitter.next("Two");
emitter.complete();
});
Run Code Online (Sandbox Code Playgroud)
与使用 DirectProcessor
var emitter = DirectProcessor.<String>create().sink();
emitter.next("One");
emitter.next("Two");
emitter.complete();
Run Code Online (Sandbox Code Playgroud)
澄清一下:我知道我可以Flux.just
在这里使用,但我的用例实际上是在 Spring 的@EventListener
s 和 Spring WebFlux之间建立一座桥梁,我想为每个传入的特定资源的 SSE 请求创建一个 Flux,然后将事件发布到这个通量。
有人能告诉我,这两种方法是否都有效?当然,肯定有一些不同。特别是,Reactor Reference Guide部分关于DirectProcessor
状态:
另一方面,它具有不处理背压的限制。因此,如果您通过 DirectProcessor 推送 N 个元素但至少其中一个订阅者的请求少于 N,则 DirectProcessor 会向其订阅者发出 IllegalStateException 信号。
这意味着什么?
[编辑:]在我使用的问题的早期版本中,Flux.generate()
而不是Flux.push()
,这显然是错误的,因为 generate 最多可以创建一个事件。
[编辑 2:] @123 向我询问了我想要实现的目标的完整示例。忍受我,这是一个 SO 问题的相当数量的代码:
我想在(非反应式)Spring 域事件侦听器和反应式 Flux 之间建立一座桥梁,然后我可以在 …
我想将 an 收集Optional
到 a 中List
,这样如果可选项存在,我最终会得到一个包含单个元素的列表,如果不存在,则得到一个空列表。
我想到的唯一方法(在 Java 11 中)是通过 Stream:
var maybe = Optional.of("Maybe");
var list = maybe.stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我知道,无论如何这应该相当有效,但我想知道是否有一种更简单的方法可以在不使用中间流的情况下将可选转换为列表?
我正在使用 Spring Boot 内置的 Gradle:bootBuildImage
任务构建我的 Docker 映像,这非常方便,因为我不必维护自己的Dockerfile
.
Gradle 任务在底层使用Paketo Bionic Base Stack ,并且可以很好地构建分层的 Docker 镜像。
现在,一些编排引擎,如 Docker Swarm(或用于开发目的的 Docker Compose)在容器内执行运行状况检查。然而不幸的是,生成的 Spring Boot Docker 镜像没有任何类似curl
或wget
安装的健康检查工具,所以类似
version: '3.7'
services:
springBootApp:
image: my/springboot/docker-image
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:8080/actuator/health"]
Run Code Online (Sandbox Code Playgroud)
中docker-compose.yml
将会失败。(我检查了执行器本身工作正常)
我知道这curl
并不wget
理想。我实际上希望 Paketo Builder 能够选择像Health Checker BuildPack这样的东西。
有没有办法配置我的bootBuildImage
Gradle 任务以包含该(或类似的)附加 BuildPack?
如上所述,我正在寻找一种易于维护的解决方案,并且不想编写自己的解决方案Dockerfile
以便能够从 Paketo 提供的所有最佳实践中获益。
我在我的域模型中有一个一对多的关系,我基本上想要阅读Foos
和过滤的集合,Bars
其中包含一个 MyBatis select 语句,使用嵌套选择Bars
.
解释一下:我的领域模型类看起来或多或少是这样的(真正的领域模型当然更复杂,但我的问题归结为这个):
public class Foo {
private String name;
private Set<Bar> bars;
// getters and setters omitted
}
public class Bar {
private String color;
// getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)
现在我想Foos
用Bars
特定颜色的特定名称阅读:
public interface FooRepository {
public List<Foo> selectFoosWithBars(String name, String color);
}
Run Code Online (Sandbox Code Playgroud)
我的 MyBatis XML Mapper 文件的相关部分如下所示:
<select id="selectFoosWithBars" resultMap="fooResult">
SELECT f.id f_id, f.name f_name FROM foos f WHERE f.name = #{name}
</select>
<select id="selectBars" resultMap="barResult"> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Kotlin 协程来理解异步代码执行。
为什么在启动异步代码块时必须指定调度程序?
以下代码块
fun doInParallel(): Unit = runBlocking {
coroutineScope {
launch { println("start A").also { Thread.sleep(1_000) }.also { println("finish A") } }
launch { println("start B").also { Thread.sleep(1_000) }.also { println("finish B") } }
}
}
Run Code Online (Sandbox Code Playgroud)
总是会打印
start A
finish A
start B
finish B
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的。
仅在显式指定调度程序后,异步代码块才会并行运行:
fun doInParallel(): Unit = runBlocking {
coroutineScope {
launch(Dispatchers.Default) { println("start A").also { Thread.sleep(1_000) }.also { println("finish A") } }
launch(Dispatchers.Default) { println("start B").also { Thread.sleep(1_000) }.also { println("finish B") …
Run Code Online (Sandbox Code Playgroud) 我在Jasper Reports中遇到了子报告.我正在使用Jasper Reports 5.0.1,我在子报表中设计了一个子报表:
main-report
- detailband 1 => outer subreport
outer subreport
- detailband 1 => inner subreport
- detailband 2 => summary info
Run Code Online (Sandbox Code Playgroud)
除非内部子报表的内容变得太大而无法放在一个页面上,否则一切正常.报告只是在第1页后结束,而不是在下一个细节中打印摘要信息,而不是添加分页符.
我对iReport中可以设置的所有选项感到有点困惑.我必须使用哪种分体式/拉伸型/位置型组合才能使其正常工作?
java ×6
hibernate ×2
jpa ×2
apache-fop ×1
collections ×1
css ×1
docker ×1
hbm ×1
health-check ×1
hql ×1
intellij-15 ×1
itext ×1
java-11 ×1
java-stream ×1
jpql ×1
kotlin ×1
mybatis ×1
named-query ×1
page-break ×1
paketo ×1
split ×1
spring ×1
spring-boot ×1
spring-data ×1
sprite ×1
sql ×1
subreport ×1
where-clause ×1