Java 游戏框架中的Yml文件:它们可以相互引用吗

Java 游戏框架中的Yml文件:它们可以相互引用吗,java,playframework,yaml,Java,Playframework,Yaml,在我的应用程序中,我想用大数据初始化它。当我在一个YML文件中写入所有这些数据时,它大约是4MB,但是应用程序没有开始产生java堆空间错误。当我删除它的某些部分直到109KB时,一切都正常,当然还有一些丢失的数据 我希望解决这个问题的方法如下: 创建多个文件,但如何引用另一个YML文件中的对象,这可能吗 在启动时通过代码将模式加载到数据库中,这样做容易吗 任何一位问题读者提出的解决方案 注意:我的应用程序中的大多数数据都是相互引用的,因此我不能将它们完全分离到多个文件中。您可以查看DBUnit

在我的应用程序中,我想用大数据初始化它。当我在一个YML文件中写入所有这些数据时,它大约是4MB,但是应用程序没有开始产生java堆空间错误。当我删除它的某些部分直到109KB时,一切都正常,当然还有一些丢失的数据

我希望解决这个问题的方法如下:

  • 创建多个文件,但如何引用另一个YML文件中的对象,这可能吗
  • 在启动时通过代码将模式加载到数据库中,这样做容易吗
  • 任何一位问题读者提出的解决方案

  • 注意:我的应用程序中的大多数数据都是相互引用的,因此我不能将它们完全分离到多个文件中。

    您可以查看DBUnit来转储和重新加载整个数据库,假设它是SQL。

    您可以查看DBUnit来转储和重新加载整个数据库,假设它是SQL。

    我在启动作业中做了类似的操作:

    @Override
    public void doJob() {
        if (Image.count() == 0 && Play.mode.equals(Play.Mode.DEV)) {
            Fixtures.deleteAllModels();
            List<Image> images = Fixtures.loadYaml("Images.yml", List.class); //<-- this just loads the image objects (not in db yet)
            Fixtures.loadModels("Albums.yml"); // <----- this puts albums into db
            int i = 0;
            for (Image img : images) {
                img.album = Album.find("byName", img.album.name).first();
                img.save(); // <--- here image entities go into db
                i++;
            }
        }
    
    @覆盖
    公共职务{
    if(Image.count()==0&&Play.mode.equals(Play.mode.DEV)){
    Fixtures.deleteAllModels();
    
    List images=Fixtures.loadYaml(“images.yml”,List.class);//我在一个启动作业中做了类似的操作:

    @Override
    public void doJob() {
        if (Image.count() == 0 && Play.mode.equals(Play.Mode.DEV)) {
            Fixtures.deleteAllModels();
            List<Image> images = Fixtures.loadYaml("Images.yml", List.class); //<-- this just loads the image objects (not in db yet)
            Fixtures.loadModels("Albums.yml"); // <----- this puts albums into db
            int i = 0;
            for (Image img : images) {
                img.album = Album.find("byName", img.album.name).first();
                img.save(); // <--- here image entities go into db
                i++;
            }
        }
    
    @覆盖
    公共职务{
    if(Image.count()==0&&Play.mode.equals(Play.mode.DEV)){
    Fixtures.deleteAllModels();
    
    List images=Fixtures.loadYaml(“images.yml”,List.class);//我们可以假设一个文件中的所有数据都大于4KB,并且堆已经用完了吗?事实上,YML文件使您独立于下划线数据库类型,这是一个非常有用的功能,因此我确实需要首先寻找解决方案。我仍然不知道4MB的文本数据将如何耗尽您的内存-我建议这样做如果你解决了这个问题,你就不需要多个文件。我现在确实解决了这个问题,使用了大约30个文件,每个文件大约100KB,对象引用在文件之间工作。我将它们命名为data.yml、data_1.yml、data_2.yml等等。然后我编写了一个代码来加载每个文件。尽管如此,我还是觉得有另一种方法可以使用一个文件,但是我不知道怎么做。我认为增加内存对我也有帮助,但当应用程序不需要时,内存会增加一倍,这只是初始化。我们可以假设一个文件中的所有数据都大于4KB,并且堆用完了吗?事实上,YML文件使您独立于底层数据库类型,这是一个非常重要的问题我仍然不知道4MB的文本数据将如何耗尽你的内存——我建议,如果你解决了这个问题,你就不需要多个文件。我现在真的解决了这个问题,使用了大约30个文件,每个文件大约100KB,对象引用在这些文件中起作用。我给它们命名为data.yml、data_1.yml、data_2.yml等等。然后我写了一个代码来加载它们。尽管如此,我还是觉得有另一种方法可以使用一个文件,但我不知道如何使用。我认为增加内存对我也有帮助,但当应用程序不需要时,内存会增加一倍,这只是初始化。