最近我开始使用Spring Boot并提出以下问题:
我们有不同的环境(如舞台,开发,制作),所有这些环境都可以在Windows或Linux上运行。 所以我创建了application-stage.properties,application-prod.properties,application-devl.properties来指定数据库连接之类的内容,因为它与操作系统无关(对于windows和linux来说都是一样)。
现在我想为嵌入式Tomcat服务器启用访问日志。
因此,根据各种指南,我在application.properties
文件中使用了以下内容:
server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.enabled=true
我被迫指定相对路径,因为我们同时使用linux和windows,但是我希望根据操作系统在不同的地方创建访问日志。
例如,我们将日志存储在c:\<product>\logs
下的窗口中,而在linux中我们使用/var/log/<product>/...
对于通常的日志,我们使用logbacks并且它允许这样的东西,但由于访问日志实际上不是由logback驱动而是使用Valves,我的问题是: 我们如何实现相同的目标这里的灵活程度如何?
我认为我不应该为此提供额外的个人资料,并将其用作:
--spring.profiles.active=windows / linux
因为我相信春季靴子的袖子有一些解决方案:) 非常感谢提前
答案 0 :(得分:2)
这是我提出的解决方案。也许它会帮助别人。
有两个步骤。
第1步
我在application-windows.properties
中创建了application-linux.properties
和src/main/resources
个文件。这些文件包含与操作系统相关的配置。
例如在Linux中我指定了这样的内容:
server.tomcat.accesslog.directory=/var/log/access_logs
对于Windows,它可以是(例如):
server.tomcat.accesslog.directory=C:\\Temp\\access_logs
第2步
spring boot应用程序(带有main方法的文件)通常如下所示:
// maybe some additional annotations
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(..., args);
}
}
第25.2段中弹簧引导的documentation表示可以通过编程方式添加配置文件 所以我稍微修改了主类以允许这种程序化添加:
// maybe some additional annotations
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) throws Exception {
SpringApplication myApp = new SpringApplication(...);
myApp.setAdditionalProfiles(getOSName());
myApp.run(args);
}
private static String getOSName() {
String os = System.getProperty("os.name");
if (os.toLowerCase().contains("win")) {
return "windows";
}
else {
return "linux";
}
}
}
就是这样,现在没有必要在--spring.profiles.active
属性中指定配置文件(我通常使用它来指定环境,如分段,生产等。
春天现在会自动加载相关的属性文件。
感谢所有提出解决方案的人们!
答案 1 :(得分:0)
我最喜欢的解决方案是在Tomcat中使用额外的类路径,并从那里加载特定于环境的属性。
即Tomcat在conf / catalina.properties中的'common.loader'属性
此外,我通常会在.war文件中保留默认属性,这样您只会指定环境特定的属性中的差异。
答案 2 :(得分:0)
如果相对路径不好,则必须执行某种特定的env操作。从https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html开始,您可以使用配置文件,也可以使用环境变量或系统属性。正如另一个答案所说,你可以从特定于环境的文件中加载属性,如果这对你来说最有意义的话。