我们正在尝试使用tomcat映像将项目移至docker,并且对如何注入属性有些困惑。
我们现在对数据库配置的配置权如下所示:
/opt/tomcat/conf/context.xml
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<ResourceLink name="DBCON"
global="jdbc/DBCON"
auth="Container"
type="javax.sql.DataSource"/>
<Resource name="jdbc/DBCON"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="${oracle.database.url}"
username="${oracle.database.username}"
password="${oracle.database.password}"
maxActive="100"
maxIdle="20"
minIdle="5"
maxWait="10000"/>
</Context>
/opt/tomcat/conf/catalina.properties
some other properties ...
...
...
oracle.database.url=jdbc:oracle:thin:@dev-database.com:1521:dev1
oracle.database.username=user
oracle.database.password=pass
我们希望使用被映射到服务器/some/loc/secrets/oracle.database.properties
上某个位置的机密,但不要理解如何将其注入context.xml中,并且我们不想添加或编辑目录.properties文件。我们计划在将来进行春季启动,但是对于一些项目来说,这项工作非常艰巨。
我已经找到了<Envrionment>
和<PreResources>
的示例,但是看不到如何告诉context.xml实际使用这些属性。
答案 0 :(得分:1)
将数据库属性设置为系统变量:
export JAVA_OPTS=$JAVA_OPTS -Doracle.database.username=user -Doracle.database.password=pass
答案 1 :(得分:1)
正如其他人所述,context.xml
文件中的变量必须可用作系统属性。从《 Tomcat配置参考》:
Tomcat配置文件的格式设置为无模式XML。元素 并且属性区分大小写。 Apache Ant样式的变量 支持替代;名称为propname的系统属性 可以在配置文件中使用$ {propname}语法使用。所有 系统属性可用,包括使用-D设置的属性 语法,JVM自动提供的语法以及 在$ CATALINA_BASE / conf / catalina.properties文件中配置
如果要将这些秘密值保存在其他文件中,则可以覆盖Tomcat docker容器的CMD。例如,这可能是一个shell脚本,该脚本从文件中读取变量,并按照@Octavian的回答将其导出,然后才启动服务器。