小编Kor*_*gay的帖子

如何让DataJpaTest自动刷新保存?

我有一个Employee具有以下列的实体:

@Entity
class Employee {
  @Column(name = "first_name", length = 14)
  private String firstName;
Run Code Online (Sandbox Code Playgroud)

我有一个 Spring JPA 存储库:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Integer> {
Run Code Online (Sandbox Code Playgroud)

test/resources/application.properties有以下内容,以便使用内存中的 h2 数据库和自动生成的表:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
Run Code Online (Sandbox Code Playgroud)

我预计这个测试会失败,因为它的firstName长度超过了允许的长度:

@DataJpaTest
public class EmployeeRepositoryTest {

  @Autowired
  private EmployeeRepository employeeRepository;

  @Test
  public void mustNotSaveFirstNameLongerThan14() {
    Employee employee = new Employee();
    employee.setFirstName("koraykoraykoray");  // 15 characters!
    employeeRepository.save(employee);
  }
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶地发现这个测试没有失败,但是以下测试确实失败了:

@DataJpaTest
public class EmployeeRepositoryTest {

  @Autowired
  private EmployeeRepository employeeRepository;

  @Test
  public void …
Run Code Online (Sandbox Code Playgroud)

spring hibernate spring-data-jpa

9
推荐指数
2
解决办法
5261
查看次数

RESTEasy:找不到内容类型application/json类型的writer

我有一个宁静的服务(post)消耗(application/json)并生成(application/json).此服务的单个参数是带注释的java对象.

我正在使用org.jboss.resteasy.client.ClientRequest将请求发送到服务.但是,我在客户端获得此异常并且异常:

找不到内容类型application/json类型的writer.

这是否意味着我缺少一些图书馆罐子,或者我必须为application/json编写自己的编写器?

我正在使用resteasy 2.3.3.Final

以下是我添加到我的pom中的各种依赖项,我认为可能与之相关:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.3.Final</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.0.5</version>
    </dependency>

    <dependency>
       <groupId>org.jboss.resteasy</groupId>
       <artifactId>resteasy-jaxb-provider</artifactId>
       <version>2.3.4.Final</version>
    </dependency>

    <dependency>
       <groupId>org.jboss.resteasy</groupId>
       <artifactId>resteasy-jackson-provider</artifactId>
       <version>2.3.4.Final</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.3.0</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.3.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

马特

java rest resteasy maven

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

JIT编译代码驻留在哪里?

所以我有这个用Java编写的方法:

public void myMethod(int y){
    int x = 5 + y;
    doSomething(x);
}
Run Code Online (Sandbox Code Playgroud)

并假设我的应用程序调用了很多次..

在Java虚拟机上运行此方法的已编译代码时,JVM将首先解释该方法.然后经过一段时间后,如果我理解正确,它将决定将其编译为机器语言.

在此刻,

它会被内存中的机器代码覆盖吗?如果被覆盖,那么尺寸差异的问题将如何解决?如果它被写入内存中的其他位置,那么加载到内存中的字节码是否会被释放?而且,如果字节码和jit编译的代码都在内存中,当应用程序再次遇到此方法时,JVM如何决定执行jit编译的代码而不是字节代码?

java jit jvm

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

变量和函数名称的范围

这是我的代码:

#include <stdlib.h>
#include <stdio.h>

int sum(int,int);

int sum(int x, int size) {
    int sum = 0;
    printf("%p\n", &x);
    printf("%p\n", &size);
    printf("%p\n", &sum);
    sum(x,size);
    return 0;
}

int main() {
    sum(2,4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是:

hello.c:11:5: error: called object type 'int' is not a function or function pointer
sum(x,size);
~~~^
Run Code Online (Sandbox Code Playgroud)

c scope

8
推荐指数
3
解决办法
516
查看次数

web.xml中的session-timeout和max-age有什么区别?

我不确定我是否理解:

<session-config>
    <session-timeout>30</session-timeout> <!-- 30 minutes! -->
    <cookie-config>
        <http-only>true</http-only>
        <max-age>1800</max-age> <!-- 1800 seconds: 30 minutes! -->
    </cookie-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
Run Code Online (Sandbox Code Playgroud)

另外,有没有办法在web.xml中配置所有cookie?这似乎仅适用于会话cookie.我需要过滤器才能使用此功能吗?

cookies web.xml servlets session-timeout

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

Spring JPA 存储库无法捕获 EntityNotFoundException

当用户使用无效 ID 搜索我的存储库时,我想抛出一个自定义错误类。这应该很简单,但我似乎无法捕捉到 JpaRepository 抛出的任何错误。我已经多次尝试解决这个问题,但以下是我最直接的尝试:

try {
    Object obj = repository.getOne(id)
}
catch (EntityNotFoundException e) {
    throw CustomException("message");
}
Run Code Online (Sandbox Code Playgroud)

在调试器中运行它时,存储库会抛出我期望的确切异常javax.persistence.EntityNotFoundException,但代码只是跳过了我的 catch 语句,并且函数返回一个错误。

我尝试使用repository.findById(id)类似的结果。我也试过捕捉ExceptionThrowable。有任何想法吗?如果最终我的问题不是很明显,我会在我的帖子中添加更多信息。

java spring-data spring-data-jpa

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

Node.js是JavaScript运行时环境还是EcmaScript环境?

根据https://nodejs.org/en/

Node.js®是基于Chrome的V8 JavaScript引擎构建的JavaScript运行时.

但是,根据这个答案,JavaScript是:

JavaScript = ECMAScript + DOM API;

并且Node.js运行时中没有DOM.(或者在那里?)还引用了本书:面向Web开发人员的专业JavaScript:

尽管JavaScript和ECMAScript通常是同义词,但JavaScript不仅仅是ECMA-262中定义的内容.实际上,完整的JavaScript实现由以下三个不同部分组成:

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

它支持我链接到的答案.

考虑到上述事实,说Node.js是ECMAScript运行时是不正确的?如果没有,如果我们想要分割Node.js并使其成为ECMAScript运行时而不是JavaScript运行时,我们需要删除(或添加?)?

javascript node.js

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

为什么这是我尝试产生无休止的Threads停在4?

我在Java 8中有这个简单的代码:

class ThreadTest {
    void threadTest() {
        new Thread(this::threadTest).start();
        System.out.println(Thread.activeCount());
    }

    public static void main(String[] args) {
        new ThreadTest().threadTest();
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我非常期待看到非常大的数字被打印出来.我在控制台中看到的只有:

4
4
4
4
4
4
4
4
4
Run Code Online (Sandbox Code Playgroud)

我说也许我无法出于任何原因看到其他人,并修改了如下代码:

class ThreadTest {
    void threadTest() {
        new Thread(this::threadTest).start();
        if (Thread.activeCount() > 4) {
            System.out.println(Thread.activeCount());
        }
    }

    public static void main(String[] args) {
        new ThreadTest().threadTest();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在什么都没打印出来了.

我在这里错过了什么?

java multithreading java-8

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

我使用IntStream和forEach创建整数列表的方法有什么问题?

我的天真代码是:

class ${
    public static void main(String[] _) {
        final List<Integer> ints = new ArrayList<>();
        IntStream.iterate(0, i -> i++).limit(5).forEach(val -> ints.add(val));
        System.out.println(ints);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的期望是在控制台中看到以下内容:

[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但实际是:

[0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

这可能是非常简单的事情,但我错过了什么?

java java-8 java-stream

8
推荐指数
3
解决办法
684
查看次数

如何构建生成的docker镜像文件目录?

我有以下内容Dockerfile

FROM busybox
COPY ./manifest.json /usr/manifest.json
RUN rm /usr/manifest.json
Run Code Online (Sandbox Code Playgroud)

哪里manifest.json只是我找到的一些随机文件..

当我从这个 Dockerfile 构建图像时,将有 3 层(如预期)。当我检查这 3 层时,我将看到预期的文件层次结构。所以第一个层将相当冗长,例如...

bin/acpid
bin/add-shell
bin/addgroup
bin/adduser
bin/adjtimex
bin/ar
bin/arch
bin/arp
bin/arping
bin/ash
... many more
Run Code Online (Sandbox Code Playgroud)

第二层将是:

usr/manifest.json
Run Code Online (Sandbox Code Playgroud)

第三层是:

proc/.wh..wh..opq
sys/.wh..wh..opq
usr/.wh.manifest.json
Run Code Online (Sandbox Code Playgroud)

我猜.wh.manifest.json意味着在应用该层时删除该文件?(不确定,只是猜测..)

我的最终目标是实际创建生成的图像将具有的文件夹结构。因此,对于上述情况,它本质上应该等于第一层,因为我首先添加一个文件,然后删除它。

我找不到任何关于.wh代表什么的文档。迭代这样的层并继续添加文件(到某个目标,现在无关紧要)并删除添加的文件(如果发现它们带有前缀)是否.wh有意义?或者我完全关闭了,还有更好的方法吗?

如果有人感兴趣,我有一些 Java 代码,可以下载并检查图像的现有层:

FROM busybox
COPY ./manifest.json /usr/manifest.json
RUN rm /usr/manifest.json
Run Code Online (Sandbox Code Playgroud)

docker

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