window / Linux Grails中的特定文件系统属性

时间:2010-10-25 14:47:48

标签: grails

我想在Grails中添加基于Linux或基于Windows的系统属性,因为我的应用需要在两者中运行。我知道我们可以添加Config中指定的grails.config.locations位置。常规。

但我需要选择文件的if和esle条件。 问题是config.grrovy有userHome grailsHome appName appVersion 我需要像osName这样的东西。 我可以继续使用syetm.properties,或者如果soembody可以告诉我这些(仅)属性在Config.groovy中是如何使用的(通过DefaultGrailsApplication或其他方式。那么woyuld很棒。

另外,如果我需要这些属性,我会将服务作为用户定义的spring-bean。这是正确和可行的方法吗?如果是,那么一些例子

2 个答案:

答案 0 :(得分:0)

为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如果你想创建一个在Linux上运行的war文件,你可以执行以下命令。

grails -Dgrails.env=productionLinux war

然后获取存储在config.groovy中的文件路径,以了解您正在运行的特定环境。

def fileToOpen=Conf.config.filePath

fileToOpen将包含您在config.groovy中根据当前运行环境分配给filePath的值,因此当使用productionLinux作为环境运行时,它将包含值/ var / dir

答案 1 :(得分:0)

您可以在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) {}
    }
}

然后春天会自动将正确的服务注入你的对象。