Немаршалинг Даты Grails

Попросите ваш пул потоков завершить работу, getQueue, для каждого результата в отдельные Runnables, удалить каждый Runnable, используя метод remove. В зависимости от типа очереди, вы можете остановить удаление на ранней стадии на основе возвращаемых значений.

По сути, это захват очереди и ее очистка, только очистка с помощью методов, которые работают. Вместо того, чтобы вручную запоминать все представления, вы используете тот факт, что пул потоков уже должен запомнить все представления. Однако вам, вероятно, нужно будет сделать защитную копию очереди, поскольку я думаю, что это живое представление, и поэтому удаление, вероятно, вызовет исключение одновременной модификации, если вы выполняли итерацию / для каждого для живого представления.

13
задан kungfoo 8 June 2009 в 08:41
поделиться

1 ответ

Самый простой способ - это, вероятно, зарегистрировать собственный DataBinder для возможных форматов даты.

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CustomDateBinder extends PropertyEditorSupport {

    private final List<String> formats;

    public CustomDateBinder(List formats) {
        List<String> formatList = new ArrayList<String>(formats.size());
        for (Object format : formats) {
            formatList.add(format.toString()); // Force String values (eg. for GStrings)
        }
        this.formats = Collections.unmodifiableList(formatList);
    }

    @Override
    public void setAsText(String s) throws IllegalArgumentException {
        if (s != null)
            for (String format : formats) {
                // Need to create the SimpleDateFormat every time, since it's not thead-safe
                SimpleDateFormat df = new SimpleDateFormat(format);
                try {
                    setValue(df.parse(s));
                    return;
                } catch (ParseException e) {
                    // Ignore
                }
            }
    }
}

Вам также потребуется реализовать PropertyEditorRegistrar

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;

import grails.util.GrailsConfig;
import java.util.Date;
import java.util.List;

public class CustomEditorRegistrar implements PropertyEditorRegistrar {
    public void registerCustomEditors(PropertyEditorRegistry reg) {
        reg.registerCustomEditor(Date.class, new CustomDateBinder(GrailsConfig.get("grails.date.formats", List.class)));
    }
}          

и создать определение Spring-bean в вашем grails-app / conf / spring / resources.groovy :

beans = {
    "customEditorRegistrar"(CustomEditorRegistrar)
}

и, наконец, определите форматы даты в вашем grails-app / conf / Config.groovy:

grails.date.formats = ["yyyy-MM-dd HH:mm:ss.SSS ZZZZ", "dd.MM.yyyy HH:mm:ss"]
18
ответ дан 1 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: