我有一个spring-boot应用程序,需要将它作为WAR部署在雄猫中。 我还需要定义/覆盖一些属性,以便该应用程序可以在此环境中工作。
我能够通过创建与我的WAR文件同名的文件tomcat/conf/Catalina/localhost/backend.xml
来做到这一点。这里的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" crossContext="true" override="true" path="/back" docBase="/home/myAppUser/webapps/backend.war">
<Environment name="spring.profiles.active" value="prod" type="java.lang.String" />
<Environment name="application.attachmentBaseDirectory" value="/home/myAppUser/attachments" type="java.lang.String" />
<Environment name="application.redirect-url" value="http://myapp.mycompany.org/frontend" type="java.lang.String" />
</Context>
除application.attachmentBaseDirectory
以外的所有环境变量均有效。
该应用程序继续使用在Windows上为我的开发环境定义的应用程序:C:\tmp\attachments
…
但是,如果我创建文件/home/myAppUser/application.yml
或/home/myAppUser/config/application.yml
,则该值将被正确覆盖...
application:
attachmentBaseDirectory: /home/myAppUser/attachments
但是,如果我在文件中代替backend.xml
定义所有值,那么除application.attachmentBaseDirectory
之外的其他值都无法工作…
这是我的问题:
tomcat/conf/Catalina/localhost/backend.xml
中的替代方法不适用于此值,而对其他值有用?application.yml
?application.attachmentBaseDirectory
属性可以在application.yml
文件中起作用,而其他属性不能起作用?更多信息:
这是我的ApplicationProperties.java
上的内容。
@Component
@ConfigurationProperties("application")
public class ApplicationProperties {
/**
* The URL to which we should redirect the user once he is logged in the application.
*/
private String redirectUrl;
/**
* The base directory in which we should put the attachments.
*/
private String attachmentBaseDirectory;
}
然后,该Bean在@Controller
中用于redirectUrl
重定向到另一个网页,并在@Service
中用于attachmentBaseDirectory
保存文件。>
答案 0 :(得分:0)
我终于找到了为什么在application.attachmentBaseDirectory
中设置属性tomcat/conf/Catalina/localhost/backend.xml
无效的原因:
这是因为它被命名为application.attachmentBaseDirectory
(camel case)而不是application.attachment-base-directory
(kebab case)。
Spring-boot allow relaxed binding,但是似乎要通过tomcat上下文使用,kebab case方法才是可行的方法。
尚未解决:
application.yml
目录中找到home
?
application.attachmentBaseDirectory
从application.yml
开始工作,而其他属性却没有?