我想评估OS(操作系统)系统属性以加载环境对应的配置文件。例如,如果OS评估为Windows,则将加载properties-win.xml
* 或 * 如果OS评估为Unix或Linux,则将加载properties-unix.xml
。
下面的spel工作正常
#{(systemProperties['os.name'].indexOf('nix') >= 0 or systemProperties['os.name'].indexOf('nux') >= 0 or systemProperties['os.name'].indexOf('aix') > 0 ) ? 'linux' :
((systemProperties['os.name'].indexOf('Win') >= 0) ? 'windows' : 'Unknow OS')}
但是为了代替每次都计算systemProperties['os.name']
,我想在一个变量中有这个,然后想匹配条件6.5.10.1。
#{systemProperties['os.name'].?((#this.indexOf('nix') >= 0 or #this.indexOf('nux') >= 0 or #this.indexOf('aix') > 0 ) ? 'unix' :
(#this.indexOf('win') >= 0) ? 'windows' : 'Unknown')}
但不知何故,它给出了解析异常。
有人能给点建议吗?
3条答案
按热度按时间cgyqldqp1#
这个方法怎么样,一个更优雅的方法,我会说。需要Spring 4。
然后,您可以使用上面的Conditions来注解要根据环境加载的所需方法或类:
linux.xml:
windows.xml:
也许它可以得到更多的增强,但只是想告诉你另一个想法,使用某些xml文件取决于操作系统。
hwamh0ep2#
无法在Spel表达式中设置变量。必须根据上下文设置变量。您可以按照
然后在Spel中将其用作#os
wmtdaxz33#
对于未来的搜索,遵循另一种选择:
在这种情况下,可以使用ROOT_PATH环境变量,或ROOT_PATH_LINUX,或ROOT_PATH_WINDOWS,操作系统特定的变量来覆盖配置。