小编f1d*_*ave的帖子

Hibernate的Session.close()是否会自动回滚未提交的事务?

我正在阅读目前的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()的预期行为是什么?它是否只是自动回滚该提交,是否会留下"挂起"事务?等等

(我明白这显然不是一个好习惯 - 我只是试图更深入地了解基础概念.)

java session hibernate transactions

13
推荐指数
1
解决办法
8644
查看次数

与使用的%相比,意外的堆大小意外

有一个内存分配问题,我希望你的帮助.我们已经分析了一些顶级服务,我们注意到它们的RES值约为1.8GB,据我所知,这意味着他们当时正在保持1.8GB的内存.如果我们刚刚启动它们(它们基本上是从缓存中读取,进行处理,然后推送到另一个缓存),这样会好的,但是看到我们在CPU密集型处理完成后仍然看到这个,我们想知道它是否意味着某些东西没有像我们预期的那样被GC.

我们使用以下参数运行程序:-Xms256m -Xmx3096m,据我所知,初始堆大小为256,最大堆大小为3096.

现在我会希望看到的是堆成长为最初需要,再缩根据需要为内存变释放(虽然这可能是我的第一个错误).我们实际看到的jvisualvm如下:

  • 3分钟:用过的堆是1GB,堆大小是2GB
  • 5分钟后:我们已经完成了处理,所以使用堆大幅下降到接近足够的zilch,堆大小但是只下降到大约1.5GB
  • 7分钟 - >:周期性的小位实时处理,使用堆只在100-200MB左右,但堆大小保持恒定在1.7GB左右.

我的问题是,为什么我的堆没有像我预期的那样缩小?这不是抢夺Linux盒子上有价值的内存的其他进程,如果是这样,我怎么能解决它?我们有时会看到内存错误,并且这些进程被分配了最"意外"的内存大小,我认为最好从它们开始.

干杯,戴夫.

(请原谅我们对JVM内存调整缺乏了解!)

java linux heap jvm

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

如何捕获和重用与Java正则表达式的匹配?

我正在努力记住在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的鱼.

但我知道$$不是正确的符号来捕捉''中的任何内容并用它来代替找到的匹配.

我在这里寻找的特别符号是什么?

提前致谢.

戴夫.

java regex

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

在项目反应器中包装阻塞I/O.

我有一个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)

java project-reactor

6
推荐指数
1
解决办法
2882
查看次数

使用 liquibase 插入空值

我们使用 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”?

java mysql liquibase

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

在Sonarqube 6.3中使用sonar.test.exclusions

我目前正在评估Sonarqube 6.3(从我当前的5.5实例中进行的一次重大升级),我在试图找出sonar.test.exclusions设置的功能时感到困惑.

有这个问题:Sonar Maven插件:如何排除测试源目录?这似乎表明它用于从分析中排除测试文件(这就是我所追求的 - 我不希望我的声纳规则集运行在我的单元测试中).文档https://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus也表明它用于"排除单元测试文件"(或许可以扩展它以使其更清晰?)

事情是,当我添加值为**/src/test/**的sonar.test.exclusions然后运行我的分析时,我仍然会找到代码气味等找到:

  • 美孚/ src目录/测试/ JAVA /富/酒吧/ BarTest.java
  • 美孚/ src目录/测试/ JAVA/LAH/LahTest.java

等等

当我使用sonar.exclusions时,它们不会出现.为什么sonar.test.exclusions没有做我期望的事情?

sonarqube

4
推荐指数
1
解决办法
8507
查看次数

在参数中使用泛型集合

假设你有:

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的列表仍然是动物列表,为什么一个方法期待动物列表在收到一堆猫时不愿意?

好奇,最重要的是 - 并有机会更好地完善我的知识.

干杯,戴夫.

java generics collections inheritance

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

如何在relativeLayout中显示微调器旁边的标签

我有以下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)

希望我在这里尝试做的很明显.三个旋转器,每个都在前一个下方,每个左侧都有一个标签,理想情况下整齐排列.

我现在得到的结果是,只有微调器显示在屏幕上,我根本没有文本标签.我在这做错了什么?我怀疑这与我的布局宽度/高度设置有关?

layout android spinner relativelayout

3
推荐指数
1
解决办法
5573
查看次数

使用XSL更改元素中的单个节点内容,同时复制其余节点

我有一些XML在每个元素中都有相当多的属性,有时我需要格式化一个或两个属性,如果满足某些条件.我以为我会用XSL做到这一点.

所以在我的XSL文件模板中,我有以下内容:

<xsl:choose>
  <xsl:when test="ytd &lt; 0.000000001 or interest &lt; 0.000000001">
    <xsl:element name="Report">
      <xsl:choose>
        <xsl:when test="ytd&lt; 0.000000001">
          <xsl:element name="ytd">0</xsl:element>
        </xsl:when>
        <xsl:when test="interest &lt; 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)

xml xslt

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

使用 Spring 5 WebClient 的测试类

我们正在慢慢地将一些项目从使用遗留的 RestTemplate 类迁移到新的 Spring 5 WebClient。作为其中的一部分,我们有一些现有的测试类,它们使用 Mockito 来验证给定的方法是否会使用模板向端点 X 发出 GET/POST/任何内容。

鉴于 WebClient 的流畅界面,同样的模拟方法并不实用。我花了一些时间使用 WireMock,这很棒,但不幸的是,似乎存在一个错误,WireMock 测试偶尔会溢出或挂起,因此我正在考虑替代方案。

有没有人对框架或技术有任何其他建议来验证 Spring 的 WebClient 是否正在将预期的调用作为 SUT 执行的一部分?

spring mockito wiremock spring-webflux

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