window / Linux Специфические свойства файловой системы в Grails - PullRequest
0 голосов
/ 25 октября 2010

Я хочу добавить системные свойства на основе linux или windows в Grails, так как мое приложение должно работать в обоих.Я знаю, что мы можем добавить местоположение grails.config.locations, указанное в Config.заводной.

Но мне нужно условие if и esle для выбора файла.проблема в config.grrovy имеет userHome grailsHome appName appVersion Мне нужно что-то вроде osName.Либо я могу продолжить с syetm.properties, либо если soembody может сказать мне, как эти (только) свойства доступны в Config.groovy (через DefaultGrailsApplication или иным образом. Это может быть замечательно).Если я буду нуждаться в этих свойствах, я сделаю свой сервис как определяемый пользователем spring-bean. Это будет правильный и выполнимый подход? Если да, то какой-нибудь пример

Ответы [ 2 ]

0 голосов
/ 25 октября 2010

Вы можете сделать что-то подобное в вашем Config.groovy:

environments {
    development {
        if (System.properties["os.name"] == "Linux") {
            grails.config.locations = [ "file:$basedir/grails-app/conf/linux.properties" ]
        } else {
            grails.config.locations = [ "file:$basedir/grails-app/conf/windows.properties" ]
        }
    }
    ...
}

В качестве альтернативы, для подхода, основанного на сервисе, вы можете объединить все специфическое поведение ОС в реализации интерфейса сервиса. Например:

// OsPrinterService.groovy
interface OsPrinterService {
    void printOs();
}

// LinuxOsPrinterService.groovy
class LinuxOsPrinterService implements OsPrinterService {
    void printOs() { println "Linux" }
}

// WindowsOsPrinterService.groovy
class WindowsOsPrinterService implements OsPrinterService {
    void printOs() { println "Windows" }
}

Затем создайте правильный экземпляр в grails-app/conf/spring/resources.groovy, например, так:

beans = {
    if (System.properties["os.name"] == "Linux") {
        osPrinterService(LinuxOsPrinterService) {}
    } else {
        osPrinterService(WindowsOsPrinterService) {}
    }
}

Тогда к вашим объектам будет автоматически добавлен правильный сервис к весне.

0 голосов
/ 25 октября 2010

Создание пользовательской среды для Windows и Linux. Что-то вроде следующего должно работать, если помещено в config.groovy

 environments {
 productionWindows {
 filePath=c:\path
 }
 productionLinux {
 filePath=/var/dir
 }
 }

После этого вы сможете использовать объект конфигурации grails для получения значения filePath независимо от того, используете ли вы его в Windows или Linux. Подробнее об этом см. Раздел 3.2 http://www.grails.org/doc/1.0.x/guide/3.%20Configuration.html Если вы хотите создать файл war для запуска в Linux, вы должны выполнить следующую команду.

grails -Dgrails.env=productionLinux war

А затем, чтобы получить путь к файлу, который вы сохранили в config.groovy для конкретной среды, в которой вы работаете.

def fileToOpen=Conf.config.filePath

fileToOpen будет содержать значение, назначенное для filePath в вашем config.groovy в зависимости от среды, в которой вы в данный момент работаете, поэтому при запуске с productionLinux в качестве среды оно будет содержать значение / var / dir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...