gpt4 book ai didi

用于评估 OS 的 Spring 表达式

转载 作者:行者123 更新时间:2023-12-01 09:57:17 25 4
gpt4 key购买 nike

我想评估OS(操作系统)系统属性以加载环境对应的配置文件。例如。如果操作系统评估为 Windows,则 properties-win.xml将被加载,或者如果操作系统评估为 Unix 或 Linux,则 properties-unix.xml将被加载。

下面的拼写工作正常

#{(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']每次,我都想把它放在一个变量中,然后想匹配条件。
我看到了 #this变量用法( http://docs.spring.io/spring-framework/docs/3.0.6.RELEASE/spring-framework-reference/html/expressions.html sec 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')}

但不知何故,它给出了解析异常。

有没有人可以提出任何建议?

最佳答案

我会说这种方法怎么样,更优雅的方法。需要 Spring 4。

public class WindowsEnvironmentCondition implements Condition {
public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").indexOf("Win") >= 0;
}
}

public class LinuxEnvironmentCondition implements Condition {
public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
return (context.getEnvironment().getProperty("os.name").indexOf("nux") >= 0
|| context.getEnvironment().getProperty("os.name").indexOf("aix") >= 0);
}
}

然后你可以使用 Conditions以上注释根据环境加载的所需方法或类:
@Configuration
@Conditional(LinuxEnvironmentCondition.class)
@ImportResource("classpath:/META-INF/spring/linux.xml")
public class LinuxConfig {

private @Value("${test}") String message;

public @Bean
ExampleService service() {
ExampleService service = new ExampleService();
service.setMessage(message);
return service;
}
}

@Configuration
@Conditional(WindowsEnvironmentCondition.class)
@ImportResource("classpath:/META-INF/spring/windows.xml")
public class WindowsConfig {

private @Value("${test}") String message;

public @Bean
ExampleService service() {
ExampleService service = new ExampleService();
service.setMessage(message);
return service;
}
}

linux.xml:
<context:property-placeholder location="classpath:/META-INF/spring/linux.properties" />

窗口.xml:
<context:property-placeholder location="classpath:/META-INF/spring/windows.properties" />

也许它可以进一步增强,但只是想向您展示根据操作系统使用某些 xml 文件的另一种想法。

关于用于评估 OS 的 Spring 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com