В нашем проекте используются микроуслуги и JPA.
Чтобы централизованно управлять моделями БД и делиться моделями с каждой службой, мы определили каждую модель как абстрактный класс с аннотацией @MappedSuperclass
и собрали их в отдельную банку. Каждый сервис может импортировать эту банку и использовать нужные ей модели.
В этой банке содержится около 400 моделей.
Мы обнаружили, что:
- Если служба импортирует эту модель jar, ей потребуется дополнительная 600MB память после запуска.
- Если я удалю этот jar или удалим все
@MappedSuperclass
, использование памяти будет нормальным после запуск.
Сервис использует пружинную загрузку 1.5.13.RELEASE и eclipselink 2.7.4 / 2.7.6. eclipselink.weaving равен stati c.
Я не знаю, почему эти модели были загружены в память и кто выполнял эту загрузку, хотя они не используемый.
И как решить эту проблему. Или у вас есть какие-либо предложения?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Пример пользователя в модели jar:
@MappedSuperclass
public abstract class User
{
@Id
@GeneratedValue(generator = "system-uuid")
@Column(name = "\"GUID\"", updatable = false, nullable = false)
private String guid;
@Column(name = "\"Name\"", nullable = false)
private String name;
@Column(name = "\"Age\"")
private Integer age;
public String getGuid()
{
return guid;
}
public void setGuid(String guid)
{
this.guid = guid;
}
......
}
Сервис использует лайки этой модели пользователя
@Entity
@Table(name = "T_ADMIN_USER")
public class AdminUser extends User
{
....
}