我刚刚开始使用TDD,可以解决我自己遇到的大部分问题.但现在我迷路了:如何检查事件是否被解雇?我在寻找类似的东西Assert.Raise
,Assert.Fire
但什么都没有.谷歌不是很有用,大多数的点击是类似的建议,foo.myEvent += new EventHandler(bar); Assert.NotNull(foo.myEvent);
但没有任何证据.
谢谢!
Java 8/9为-XX:+UseCGroupMemoryLimitForHeap
(with -XX:+UnlockExperimentalVMOptions
)带来了支持.这设置-XX:MaxRAM
为cgroup内存限制.默认情况下,JVM分配大约25%的最大RAM,因为-XX:MaxRAMFraction
默认值为4.
例:
MaxRAM = 1g
MaxRAMFraction = 4
JVM is allowed to allocate: MaxRAM / MaxRAMFraction = 1g / 4 = 256m
Run Code Online (Sandbox Code Playgroud)
仅使用25%的配额似乎是部署的浪费(通常)由单个JVM进程组成.所以现在人们设置了-XX:MaxRAMFraction=1
,所以JVM理论上允许使用100%的MaxRAM.
对于1g示例,这通常会导致堆大小约为900米.这似乎有点高 - JVM或其他东西(如远程shell或进程外任务)没有很多空闲空间.
那么这个配置(-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1
)被认为是安全的甚至是最佳实践吗?或者我应该还是伸手接-Xmx
,-Xms
,-Xss
等?
我正在使用JPA2和Hibernate,并尝试为我的实体引入一个公共基类.到目前为止看起来像这样:
@MappedSuperclass
public abstract class BaseEntity {
@Id
private Long id;
@Override
public int hashCode() {
// ...
}
@Override
public boolean equals(Object obj) {
// ...
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于每个表都有一个$entityname_seq
我想用作序列生成器的序列.如何从我的子类中设置它?我想我需要覆盖@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator.
这段丑陋的代码确实可以编译但是会抛出NPE s == null
public static boolean isNullOrEmpty(String s)
{
return s != null ? s.isEmpty() : null;
}
Run Code Online (Sandbox Code Playgroud)
虽然这不(如预期):
public static boolean isNullOrEmpty(String s)
{
if(s != null)
return s.isEmpty();
else
return null;
}
Run Code Online (Sandbox Code Playgroud)
我知道它们都是明显错误的,但是当我在源代码中找到第一段代码时,我很惊讶它编译了.
编辑:这是Java 7中JLS的相关部分.我猜测第一个语句适用但粗体语句适用.
15.25条件运算符?:
[...]
条件表达式的类型确定如下:
[...]
[...]
我试图将Calendar
s与JPA2 进行比较.查询看起来有点像:
TypedQuery<X> q = em.createQuery("select r from Record r where r.calendar= :calendar", X.class);
Calendar c = foo(); // setting fields and stuff
q.setParameter("calendar", c);
Run Code Online (Sandbox Code Playgroud)
但是,这会比较日期+时间.我想知道MM:DD:YYYY是否相等而且不关心时间.有没有一种很好的方法在JPA2中做到这一点,还是我必须创建一个本机查询?
我尝试将HH:MM:SS:...设置为零,然后将其保存在数据库中,但我不知道这是非常明智的,关于时区和夏令时和东西.
如果响应json是一个空列表,我该如何与rest-assured(2.4.0)一起检查?
鉴于响应[]
(带标题content-type=application/json
)我试过:
.body(Matchers.emptyArray()) // expected: an empty array, actual: []
.body("/", Matchers.emptyArray()) // invalid expression /
.body(".", Matchers.emptyArray()) // invalid expression .
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何使用spring-data-mongodb从GridFS流式传输二进制文件,以及GridFSTemplate
当我已经拥有权限时ObjectId
.
GridFSTemplate返回GridFSResource
(getResource()
)或GridFSFile
(findX()
).
我可以GridFSFile
通过ID 获取:
// no way to get the InputStream?
GridFSFile file = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(id)))
Run Code Online (Sandbox Code Playgroud)
但没有明显的路怎么走一个InputStream
为GridFSFile
.
只有GridFSResource
让我获得corresonding的保持InputStream
用InputStreamResource#getInputstream
.但获得一个的唯一方法GridFSResource
是通过它filename
.
// no way to get GridFSResource by ID?
GridFSResource resource = gridFsTemplate.getResource("test.jpeg");
return resource.getInputStream();
Run Code Online (Sandbox Code Playgroud)
不知何故,GridFsTemplate
API意味着文件名是唯一的 - 它们不是.该GridFsTemplate
实现只返回的第一个元素.
现在我正在使用本机MongoDB API,一切都有意义:
GridFS gridFs = new GridFs(mongo);
GridFSDBFile nativeFile = gridFs.find(blobId);
return nativeFile.getInputStream();
Run Code Online (Sandbox Code Playgroud)
看起来我误解了Spring …
有没有办法用 Java 记录做空对象?对于课程,我会这样做:
public class Id {
public static final Id NULL_ID = new Id();
private String id;
public Id(String id) {
this.id = Objects.requireNonNull(id);
}
private Id() {}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为每个构造函数都需要经过规范的 ( Id(String id
)构造函数,而我不能只是调用super()
来绕过不变量。
public record Id(String id) {
public static final Id NULL_ID = null; // how?
public Id {
Objects.requireNonNull(id);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我解决了这个问题
public Id {
if (NULL_OBJECT != null)
Objects.requireNonNull(id);
}
Run Code Online (Sandbox Code Playgroud)
但这感觉不对,并且容易出现并发问题。
我还没有发现很多关于记录背后的设计思想的讨论,这可能已经讨论过了。如果像这样保持简单,那是可以理解的,但感觉很尴尬,我已经在小样本中多次遇到这个问题。
似乎没有属性的代表.有没有方便的方法来做到以下几点?
Assert.Throws<InvalidOperationException>(
delegate
{
// Current is a property as we all know
nullNodeList.GetEnumerator().Current;
});
Run Code Online (Sandbox Code Playgroud) 有时当我更改Qt项目中的代码(Qt Creator 2.1.0 with mingw32)时,更改不会在生成后生成的机器代码中反映出来.这种情况主要发生在我更改构造函数中的默认值或方法/构造函数中的参数顺序时.通常,完全重建会修复(但需要几分钟).
我正在帮助自己在构建之前删除生成的可执行文件或库,这似乎在大多数时候都有帮助.这是否意味着链接目标文件时会出现问题?
我来自java/.net,我习惯了不同的行为.如果有人能解释我的错误和/或指向一些相关文章,我会很高兴.
谢谢!