小编Naz*_* K.的帖子

Java 8日期时间:从ZonedDateTime获取一天的开始

这些之间有什么区别:

zonedDateTime.truncatedTo(ChronoUnit.DAYS);

zonedDateTime.toLocalDate().atStartOfDay(zonedDateTime.getZone());
Run Code Online (Sandbox Code Playgroud)

有理由偏爱另一个吗?

谢谢

java datetime java-8 java-time

53
推荐指数
3
解决办法
4万
查看次数

如何将查询提示添加到spring数据jpa querydsl查询?

我正在使用Spring Data JPA 1.7.1

我试图通查询提示(例如,对于休眠查询缓存),以查询中使用标准的Spring数据存储库的方法querydsl时,如在限定的QueryDslPredicateExecutor接口,例如findOne(Predicate predicate),findAll(Predicate predicate)

我认为可以通过覆盖QueryDslPredicateExecutor(在我的存储库界面或中间接口中)方法并添加QueryHints注释来设置它们,但由于我无法在任何地方找到这个记录,我想知道这是否是推荐的方法.

这是一个例子:

public interface MyEntityRepository extends CrudRepository<MyEntity, Integer>, CacheableQueryDslPredicateExecutor<MyEntity> {

    @QueryHints(value = {
            @QueryHint(name = "org.hibernate.cacheable", value = "true"),
            @QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
            @QueryHint(name = "org.hibernate.cacheRegion", value = "myCacheRegion")
    })
    Iterable<T> findAll(Predicate predicate);

}
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa querydsl spring-data-jpa

15
推荐指数
1
解决办法
9765
查看次数

有一个适用于log4j2的适配器可以在slf4j上运行吗?

我有一个使用log4j2的第三方库(elasticsearch 5.x).我的应用程序使用slf4j.是否有适用于log4j版本2的适配器,类似于版本1适配器(log4j-over-slf4j)?

只是为了澄清:我不想实际使用log4j或log4j2作为实际的实现(绑定).我使用logback.所以我需要一个log4j2到slf4j适配器,而不是slf4j绑定.

我还应该提一下,我已经找到并尝试了这个库(在2.0-beta版本中):https: //logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html 但它给了我这个错误:

Caused by: java.lang.AbstractMethodError: org.apache.logging.slf4j.SLF4JLoggerContextFactory.getContext(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Z)Lorg/apache/logging/log4j/spi/LoggerContext;
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426)
at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:49)
at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:105)
at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:72)
at org.elasticsearch.common.component.AbstractComponent.<init>(AbstractComponent.java:37)
at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:98)
at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:99)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:124)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:258)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:125)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:111)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:101)
Run Code Online (Sandbox Code Playgroud)

编辑:好吧..所以我想我昨天只是失明了,我只看到了这个库的测试版.因此答案是有适配器等,它在这里:

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-to-slf4j https://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html

最新版本目前为2.8.2

java log4j slf4j log4j2

12
推荐指数
2
解决办法
5155
查看次数

如何在使用注释时声明Spring bean autowire-candidate ="false"?

我正在使用@ComponentScan@Component定义我的春豆.我想要的是声明其中一个bean autowire-candidate=false.

这可以使用xml中的此属性来完成.是不是注释中的等价物?

我想要这个的原因是因为我有2个相同接口的实现,我不想使用@Qualifier.

编辑:使用@Primary是一个有效的解决方案,但autowire候选人在我看来似乎是一个有用的功能与自己的语义.

谢谢

java spring spring-annotations

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

当json包含type属性时,jackson能否确定要反序列化的根对象类型?

假设序列化为json包含实际对象的类名,在Class上使用此批注:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type")
class MyClass {
    String foo;
}
Run Code Online (Sandbox Code Playgroud)

所以json就是这样的:

{"@type": "com.example.MyClass", "foo": "bar"}
Run Code Online (Sandbox Code Playgroud)

可以在不指定类型的情况下反序列化吗?我的意思是甚至不是超级型.就像这样:

objectMapper.readValue(value, Object.class);
Run Code Online (Sandbox Code Playgroud)

它实际上没有用,它带回了一张地图.

java json jackson

9
推荐指数
1
解决办法
1万
查看次数

Python psycopg2游标

来自psycopg2文档:

执行数据库查询时,Psycopg游标通常会获取后端返回的所有记录,并将它们传输到客户端进程.如果查询返回了大量数据,则客户端将分配大量内存.如果数据集太大而无法在客户端实际处理,则可以创建服务器端游标.

我想查询一个可能有数千行的表,并为每个行执行一些操作.普通游标实际上会将整个数据集带到客户端吗?这听起来不太合理.代码是这样的:

conn = psycopg2.connect(url)
cursor = conn.cursor()
cursor.execute(sql)
for row in cursor:
    do some stuff
cursor.close()
Run Code Online (Sandbox Code Playgroud)

我希望这是一个流媒体操作.第二个问题是关于游标的范围.在我的循环中,我想更新另一个表.我是否需要打开一个新光标并每次关闭?每个项目更新都应该在自己的事务中,因为我可能需要进行回滚.

for row in cursor:
    anotherCursor = anotherConn.cursor()
    anotherCursor.execute(update)
    if somecondition:
        anotherConn.commit()
    else:
        anotherConn.rollback
cursor.close()
Run Code Online (Sandbox Code Playgroud)

========编辑:我对第一部分的回答========

好的,我会尝试回答我问题的第一部分.在调用execute之前,正常游标实际上会带来整个数据集,甚至在开始迭代结果集之前.您可以通过在每个步骤检查进程的内存占用量来验证这一点.但是对服务器端游标的需求实际上是由于postgres服务器而不是客户端,并在此处记录:http://www.postgresql.org/docs/9.3/static/sql-declare.html

现在,从文档中可以立即看出这一点,但实际上可以在事务持续期间临时创建这些游标.不需要显式创建一个在数据库中返回refcursor的函数,具有特定的SLQ语句等.使用psycopg2,您只需在获取游标时给出一个名称,并为该事务创建一个临时游标.所以代替:

 cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

你只需要:

 cursor = conn.cursor('mycursor')
Run Code Online (Sandbox Code Playgroud)

这就是它,它的工作原理.在设置fetchSize时,我假设在使用JDBC时完成了同样的事情.它只是更透明一点.请参阅此处的文档:https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor

您可以通过查询同一事务中的pg_cursors视图来测试这是否有效.获取客户端游标后出现服务器端游标,关闭客户端游标后消失.所以底线:我很高兴对我的代码进行更改,但我必须说这对于没有经历过postgres的人来说是一个很大的难题.

python psycopg2 cursor python-2.7

8
推荐指数
1
解决办法
1万
查看次数

Class类的实例是否保证是每个类加载器的单例?

因此,以这种方式检查类的相同性是否有效:

if (object.getClass() == anotherObject.getClass()) {

}
Run Code Online (Sandbox Code Playgroud)

可能答案是肯定的,因为Class类没有覆盖equals()所以看起来它Object.equals()适用于Class的相等性.但是,如果在其他地方记录下来,我会感兴趣.谢谢.

java

8
推荐指数
1
解决办法
78
查看次数

Java 8 迭代器流式传输到迭代器会导致对 hasNext() 的冗余调用

我注意到以下场景中出现了一些奇怪的行为:

迭代器 -> 流 -> map() -> 迭代器() -> 迭代

原始迭代器的 hasNext() 在返回 false 后又被调用一次。

这是正常的吗?

package com.test.iterators;

import java.util.Iterator;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class TestIterator {

    private static int counter = 2;

    public static void main(String[] args) {

        class AdapterIterator implements Iterator<Integer> {
            boolean active = true;

            @Override
            public boolean hasNext() {
                System.out.println("hasNext() called");

                if (!active) {
                    System.out.println("Ignoring duplicate call to hasNext!!!!");
                    return false;
                }

                boolean hasNext = counter >= 0;
                System.out.println("actually has next:" + active); …
Run Code Online (Sandbox Code Playgroud)

iterator java-8 java-stream spliterator

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

卡夫卡消费者0.10向后兼容吗?

kafka消费者0.10是否与0.9经纪商兼容?

如果我没有弄错,0.9消费者仍然被认为是beta,而0.10是稳定的,对吧?这就是为什么我对使用0.10版本感兴趣,但我的经纪人版本是0.9,我不想升级它.

apache-kafka kafka-consumer-api

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