我正在阅读目前的Hibernate文档,我看到了以下引用:
如果Session抛出异常(包括任何SQLException),则立即回滚数据库事务,调用Session.close()并丢弃Session实例.Session的某些方法不会使会话保持一致状态.Hibernate抛出的异常都不能被视为可恢复的.确保通过在finally块中调用close()来关闭Session.
就我而言,这一切都是有道理的,但它确实让我想知道关闭会话的效果是什么,交易既不提交也不回滚?
例如,考虑以下事项:
session = getSessionFactory().openSession();
session.beginTransaction();
session.save(carObject);
//session.getTransaction().commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
如果提交已注释掉,并且此处没有调用回滚,session.close()的预期行为是什么?它是否只是自动回滚该提交,是否会留下"挂起"事务?等等
(我明白这显然不是一个好习惯 - 我只是试图更深入地了解基础概念.)
有一个内存分配问题,我希望你的帮助.我们已经分析了一些顶级服务,我们注意到它们的RES值约为1.8GB,据我所知,这意味着他们当时正在保持1.8GB的内存.如果我们刚刚启动它们(它们基本上是从缓存中读取,进行处理,然后推送到另一个缓存),这样会好的,但是看到我们在CPU密集型处理完成后仍然看到这个,我们想知道它是否意味着某些东西没有像我们预期的那样被GC.
我们使用以下参数运行程序:-Xms256m -Xmx3096m,据我所知,初始堆大小为256,最大堆大小为3096.
现在我会希望看到的是堆成长为最初需要,再缩根据需要为内存变释放(虽然这可能是我的第一个错误).我们实际看到的jvisualvm如下:
我的问题是,为什么我的堆没有像我预期的那样缩小?这不是抢夺Linux盒子上有价值的内存的其他进程,如果是这样,我怎么能解决它?我们有时会看到内存错误,并且这些进程被分配了最"意外"的内存大小,我认为最好从它们开始.
干杯,戴夫.
(请原谅我们对JVM内存调整缺乏了解!)
我正在努力记住在Java中使用find-replace regex匹配的正确表示法.
说我有字符串
String s = "My name is ''Eric'' and I have a bee called ''Eric''
and a fish called ''Wanda''."
Run Code Online (Sandbox Code Playgroud)
我想做类似以下的事情:
s.replaceAll("\'\'$$\'\'", "$$");
Run Code Online (Sandbox Code Playgroud)
给:我的名字是Eric,我有一只名叫Eric的蜜蜂和一只名叫Wanda的鱼.
但我知道$$不是正确的符号来捕捉''中的任何内容并用它来代替找到的匹配.
我在这里寻找的特别符号是什么?
提前致谢.
戴夫.
我有一个spring-webflux API,它在服务层需要从使用JDBC的现有存储库中读取.
在完成了关于这个主题的阅读之后,我想将阻塞数据库调用的执行与其他非阻塞异步代码分开.
我已经定义了一个专用的jdbcScheduler:
@Bean
public Scheduler jdbcScheduler() {
return Schedulers.fromExecutor(Executors.newFixedThreadPool(maxPoolSize));
}
Run Code Online (Sandbox Code Playgroud)
以及使用它的AsyncWrapper实用程序:
@Component
public class AsyncJdbcWrapper {
private final Scheduler jdbcScheduler;
@Autowired
public AsyncJdbcWrapper(Scheduler jdbcScheduler) {
this.jdbcScheduler = jdbcScheduler;
}
public <T> Mono<T> async(Callable<T> callable) {
return Mono.fromCallable(callable)
.subscribeOn(jdbcScheduler)
.publishOn(Schedulers.parallel());
}
}
Run Code Online (Sandbox Code Playgroud)
然后用于包装jdbc调用,如下所示:
Mono<Integer> userIdMono = asyncWrapper.async(() -> userDao.getUserByUUID(request.getUserId()))
.map(userOption -> userOption.map(u -> u.getId())
.orElseThrow(() -> new IllegalArgumentException("Unable to find user with ID " + request.getUserId())));
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1)我是否正确地将阻塞调用的执行推送到另一组线程?对于这些东西相当新,我正在努力与subscribeOn()/ publishOn()的复杂性.
2)假设我想使用生成的单声道,例如调用带有userIdMono结果的API,将在哪个调度程序上执行?专门为jdbc调用创建的那个,或者反应堆通常在其中运行的主(?)线程?例如
userIdMono.map(id -> someApiClient.call(id));
Run Code Online (Sandbox Code Playgroud) 我们使用 liquibase 来管理我们的 MySQL 数据库之一的更新、回滚等。
我遇到的一个小小的好奇是在更新或回滚过程中将值设置为 null 的过程。例子:
<rollback>
<update tableName="boats">
<column name="engine" value="null" />
<column name="oars" value="2" />
Run Code Online (Sandbox Code Playgroud)
起初我有点担心 "null" 会从字面上插入字符串 "null",但事实证明 liquibase 似乎有一些实际上插入空值的智能。
我想知道这是否是推荐的这样做的方式,或者是否有一种与平台无关的方式在 Liquibase 中明确地说“nullValue”?
我目前正在评估Sonarqube 6.3(从我当前的5.5实例中进行的一次重大升级),我在试图找出sonar.test.exclusions设置的功能时感到困惑.
有这个问题:Sonar Maven插件:如何排除测试源目录?这似乎表明它用于从分析中排除测试文件(这就是我所追求的 - 我不希望我的声纳规则集运行在我的单元测试中).文档https://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus也表明它用于"排除单元测试文件"(或许可以扩展它以使其更清晰?)
事情是,当我添加值为**/src/test/**的sonar.test.exclusions然后运行我的分析时,我仍然会找到代码气味等找到:
等等
当我使用sonar.exclusions时,它们不会出现.为什么sonar.test.exclusions没有做我期望的事情?
假设你有:
public interface A {}
public class B implements A {}
public class C {
void foo (List<A>) {}
}
public class Test {
//Declaration one
List<A> x = new List<A>();
//Declaration two
List<A> x = new List<B>();
B b = new B();
x.add(b);
new C().foo(x);
}
Run Code Online (Sandbox Code Playgroud)
现在显然声明一个是正确的方法,并且您在声明二上收到编译错误.我想知道为什么Java选择以这种特定的方式强制执行类型安全; 如果Cats的列表仍然是动物列表,为什么一个方法期待动物列表在收到一堆猫时不愿意?
好奇,最重要的是 - 并有机会更好地完善我的知识.
干杯,戴夫.
我有以下RelativeLayout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<RadioGroup
<!--stuff-->
</RadioGroup>
<Spinner
android:id="@+id/colour_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/radioGroup1" />
<TextView
android:id="@+id/colourLabel"
android:text="@string/label_colour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/radioGroup1"
android:layout_toLeftOf="@+id/colour_spinner"/>
<Spinner
android:id="@+id/country_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/colour_spinner" />
<TextView
android:id="@+id/countryLabel"
android:text="@string/label_country"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/colour_spinner"
android:layout_toLeftOf="@+id/country_spinner"/>
<Spinner
android:id="@+id/stadium_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/country_spinner" />
<TextView
android:id="@+id/stadiumLabel"
android:text="@string/label_stadium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/country_spinner"
android:layout_toLeftOf="@+id/stadium_spinner"/>
Run Code Online (Sandbox Code Playgroud)
希望我在这里尝试做的很明显.三个旋转器,每个都在前一个下方,每个左侧都有一个标签,理想情况下整齐排列.
我现在得到的结果是,只有微调器显示在屏幕上,我根本没有文本标签.我在这做错了什么?我怀疑这与我的布局宽度/高度设置有关?
我有一些XML在每个元素中都有相当多的属性,有时我需要格式化一个或两个属性,如果满足某些条件.我以为我会用XSL做到这一点.
所以在我的XSL文件模板中,我有以下内容:
<xsl:choose>
<xsl:when test="ytd < 0.000000001 or interest < 0.000000001">
<xsl:element name="Report">
<xsl:choose>
<xsl:when test="ytd< 0.000000001">
<xsl:element name="ytd">0</xsl:element>
</xsl:when>
<xsl:when test="interest < 0.000000001">
<xsl:element name="interest">0</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)
YTD和兴趣领域的运作正如我所期望的那样,对我来说基本上将小数量减少到零.问题是否则是条款; 我似乎误解了如何使用副本.我希望将Report元素的其他n个属性复制到原始XML中.问题是这个当前的模板我得到如下输出的报告,它有一个非常小的ytd:
<Report><ytd>0</ytd></Report>
Run Code Online (Sandbox Code Playgroud)
所以显然我并没有正确地复制剩下的元素.有什么指针吗?
编辑:示例输入XML文件可能是:
<Reports>
<Report>
<name>Bob</name>
<account>Saver</account>
<ytd>100</ytd>
<interest>0.5</ytd>
<cosigned>false</cosigned>
</Report>
<Report>
<name>Steve</name>
<account>Gold Account</account>
<ytd>0.0000000001</ytd>
<interest>0.0000000001</ytd>
<cosigned>false</cosigned>
</Report>
</Reports>
Run Code Online (Sandbox Code Playgroud)
期望的输出将是:
<Reports>
<Report>
<name>Bob</name>
<account>Saver</account>
<ytd>100</ytd>
<interest>0.5</ytd>
<cosigned>false</cosigned>
</Report>
<Report>
<name>Steve</name>
<account>Gold Account</account>
<ytd>0</ytd>
<interest>0</ytd>
<cosigned>false</cosigned>
</Report> …Run Code Online (Sandbox Code Playgroud) 我们正在慢慢地将一些项目从使用遗留的 RestTemplate 类迁移到新的 Spring 5 WebClient。作为其中的一部分,我们有一些现有的测试类,它们使用 Mockito 来验证给定的方法是否会使用模板向端点 X 发出 GET/POST/任何内容。
鉴于 WebClient 的流畅界面,同样的模拟方法并不实用。我花了一些时间使用 WireMock,这很棒,但不幸的是,似乎存在一个错误,WireMock 测试偶尔会溢出或挂起,因此我正在考虑替代方案。
有没有人对框架或技术有任何其他建议来验证 Spring 的 WebClient 是否正在将预期的调用作为 SUT 执行的一部分?