引起Spring Boot故障安全清除(收集)的原因

我有一个Java Spring Boot" title="Spring Boot">Spring Boot应用程序,具有以下与以下异常相关的实体

@Entity

@Table(

name = "product",

indexes = @Index(

name = "idx_asin",

columnList = "asin",

unique = true

)

)

public class SProduct implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long id;

@Column(name = "asin", unique = false, nullable = false, length = 10)

private String asin;

@Column(name = "rootcategory")

private Long rootcategory;

@Column(name = "imageCSV", unique = false, nullable = true, length = 350)

private String imagesCSV;

@Column(name = "title", unique = false, nullable = true, length = 350)

private String title;

private Date created;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "mainProduct", cascade = CascadeType.ALL)

private Set<FBT> fbts;

@OneToOne(fetch = FetchType.EAGER, mappedBy = "downloadProductId", cascade = CascadeType.ALL)

private Download download;

@Entity

@Table(

name = "fbt",

uniqueConstraints={@UniqueConstraint(columnNames = {"main_product_id" , "collection"})},

indexes = {@Index(

name = "idx_main_product_id",

columnList = "main_product_id",

unique = false),

@Index(

name = "idx_product_fbt1id",

columnList = "product_fbt1_id",

unique = false),

@Index(

name = "idx_product_fbt2id",

columnList = "product_fbt2_id",

unique = false)

}

)

public class FBT implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long id;

@ManyToOne

@JoinColumn(name = "main_product_id")

private SProduct mainProduct;

@ManyToOne

@JoinColumn(name = "product_fbt1_id")

private SProduct sproductFbt1;

@ManyToOne

@JoinColumn(name = "product_fbt2_id")

private SProduct sproductFbt2;

@Column(name = "bsr", nullable = false)

private int bsr;

private Date collection;

我的fbt存储库中有以下查询

  FBT findByMainProductAndCollection(SProduct mainProduct,Date collection);

当mainProduct和collection的数据库中存在数据时,导致以下消息输出异常,否则返回null。

  <message>HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@69b7fcfc&lt;rs=HikariProxyResultSet@325408381 wrapping com.mysql.jdbc.JDBC42ResultSet@108693fa&gt;</message>

<message>HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries</message>

<message>HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@47c40535&lt;rs=HikariProxyResultSet@2005129089 wrapping com.mysql.jdbc.JDBC42ResultSet@9894f70&gt;</message>

<message>HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries</message>

<message>HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@5b0cd175&lt;rs=HikariProxyResultSet@1598144514 wrapping com.mysql.jdbc.JDBC42ResultSet@6a7ff475&gt;</message>

<message>HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries</message>

<message>HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@f67e2cc&lt;rs=HikariProxyResultSet@319200129 wrapping com.mysql.jdbc.JDBC42ResultSet@215b8a6&gt;</message>

<message>HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries</message>

<message>HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@5961afc0&lt;rs=HikariProxyResultSet@1772496904 wrapping com.mysql.jdbc.JDBC42ResultSet@5956a59b&gt;</message>

<message>HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries</message>

<message>HHH000100: Fail-safe cleanup (collections) :

我决定放弃上述内容,而是编写一个@query进行计数,因为我只需要确定数据是否存在,就可以避免出现此问题,这使我认为我应该更改所有代码以使用@query。

 @Query("select count(*) as count from FBT where main_product_id = :id and collection= :collection")

int countByMainProductIdAndCollection(@Param("id") long id, @Param("collection") Date collection);

尽管类似地,当产品已经存在于一个SProduct的数据库中时,这似乎也是随机发生的。

SProductRepo.saveAndFlush(s);

我说随机是因为11个运行相同代码的应用程序随上述消息随机间隔退出。该代码不会生成任何异常,并且成功导致数据库更新的10000相同的代码也会导致失败。当尝试更新以前使用过的数据库时,代码停止。

""2018-12-28 00:56:06 [KeepaAPI-RetryScheduler] WARN  org.hibernate.engine.loading.internal.LoadContexts - HHH000100: Fail-safe cleanup (collections) : org.hibernate.eng

ine.loading.internal.CollectionLoadContext@5c414639<rs=HikariProxyResultSet@1241510017 wrapping Result set representing update count of 13>

""2018-12-28 00:56:06 [KeepaAPI-RetryScheduler] WARN org.hibernate.engine.loading.internal.CollectionLoadContext - HHH000160: On CollectionLoadContext#cleanup, localLoa

dingCollectionKeys contained [1] entries

""2018-12-28 00:56:06 [KeepaAPI-RetryScheduler] WARN org.hibernate.engine.loading.internal.LoadContexts - HHH000100: Fail-safe cleanup (collections) : org.hibernate.eng

ine.loading.internal.CollectionLoadContext@5595c065<rs=HikariProxyResultSet@2140082434 wrapping Result set representing update count of 14>

""2018-12-28 00:56:06 [KeepaAPI-RetryScheduler] WARN org.hibernate.engine.loading.internal.CollectionLoadContext - HHH000160: On CollectionLoadContext#cleanup, localLoa

dingCollectionKeys contained [1] entries

""2018-12-28 00:56:06 [KeepaAPI-RetryScheduler] WARN org.hibernate.engine.loading.internal.LoadContexts - HHH000100: Fail-safe cleanup (collections) : org.hibernate.eng

ine.loading.internal.CollectionLoadContext@2956fe24<rs=HikariProxyResultSe

另外,SProduct findByAsin(String asin)查询会导致相同的问题,但是数据库中的查询可以正常工作,并且该操作过去可以在Spring

Boot中工作。

mysql> select * from product where asin="B004FXJOQO";

| id | asin | created | imagecsv | rootcategory | title | 9 | B004FXJOQO | 2018-08-04 | 41T0ZwTvSSL.jpg,61V90AZKbGL.jpg,51AdEGCTZqL.jpg,51LDnCYfR0L.jpg,71bbIw43PjL.jpg | 228013 | Dual Voltage Tester, Non Contact Tester for High and Low Voltage with 3-m Drop Protection Klein Tools NCVT-2 |

1 row in set (0.00 sec)

我想知道的是,产生这种消息的一般原因是什么?

为什么尽管插入语句周围的try catch语句是我代码中最后执行的语句,但是为什么他们仍停止我的应用程序?

是否有日志调试设置可用于确定生成消息的确切原因?

有没有办法关闭或控制此功能?

  <parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.1.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

<maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>

<maven.test.skip>true</maven.test.skip>

</properties>

<repositories>

<repository>

<id>Keepa</id>

<name>Keepa Repository</name>

<url>https://keepa.com/maven/</url>

</repository>

</repositories>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

<exclusions>

<exclusion>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-logging</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-log4j2</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-integration</artifactId>

</dependency>

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4.7</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.6</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-compress</artifactId>

<version>1.18</version>

</dependency>

<dependency>

<groupId>com.google.api-client</groupId>

<artifactId>google-api-client</artifactId>

<version>1.22.0</version>

</dependency>

<dependency>

<groupId>com.google.oauth-client</groupId>

<artifactId>google-oauth-client-jetty</artifactId>

<version>1.22.0</version>

</dependency>

<dependency>

<groupId>com.google.apis</groupId>

<artifactId>google-api-services-oauth2</artifactId>

<version>v1-rev120-1.22.0</version>

</dependency>

<dependency>

<groupId>com.google.oauth-client</groupId>

<artifactId>google-oauth-client-java6</artifactId>

<version>1.22.0</version>

</dependency>

<dependency>

<groupId>com.google.oauth-client</groupId>

<artifactId>google-oauth-client</artifactId>

<version>1.22.0</version>

</dependency>

<dependency>

<groupId>com.google.apis</groupId>

<artifactId>google-api-services-gmail</artifactId>

<version>v1-rev48-1.22.0</version>

</dependency>

<dependency>

<groupId>org.codehaus.mojo</groupId>

<artifactId>exec-maven-plugin</artifactId>

<version>1.5.0</version>

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-nop</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>com.jcraft</groupId>

<artifactId>jsch</artifactId>

<version>0.1.54</version>

</dependency>

<dependency>

<groupId>com.myjeeva.digitalocean</groupId>

<artifactId>digitalocean-api-client</artifactId>

<version>2.16</version>

</dependency>

<dependency>

<groupId>com.google.code.gson</groupId>

<artifactId>gson</artifactId>

</dependency>

<dependency>

<groupId>com.keepa.api</groupId>

<artifactId>backend</artifactId>

<version>LATEST</version>

</dependency>

<dependency>

<groupId>org.jdeferred</groupId>

<artifactId>jdeferred-core</artifactId>

<version>1.2.6</version>

</dependency>

<dependency>

<groupId>com.google.guava</groupId>

<artifactId>guava</artifactId>

<version>22.0</version>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build

我将内存从1gb增加到了2gb,但是内存仅是可用内存的30%。

关于这个问题有什么想法吗?

问候亚历克斯

回答:

你可以试试@Fetch(value = SELECT)吗?

@OneToMany(fetch = FetchType.EAGER, mappedBy = "mainProduct", cascade = CascadeType.ALL)

@Fetch(value=FetchMode.SELECT)

private Set<FBT> fbts;

以上是 引起Spring Boot故障安全清除(收集)的原因 的全部内容, 来源链接: utcz.com/qa/402406.html

回到顶部