[英]Different resources from context.xml for maven profiles
我有一个运行在tomcat 8上的应用程序,它运行正常。 现在,我想构建用于开发,测试和生产环境的应用程序,其中该应用程序连接到不同的数据库服务器,并且我想选择由不同概要文件中的maven属性使用的资源。
因此,在我的context.xml中,我为每个数据库服务器定义了如下所示的数据源。
<Resource name="jdbc/db-dev" auth="Container"
type="javax.sql.DataSource" maxTotal="1000" maxIdle="30"
maxWaitMillis="10000" username="user" password="password"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://x.x.x.x:3306/dbname;" />
<Resource name="jdbc/db-test" auth="Container"
type="javax.sql.DataSource" maxTotal="1000" maxIdle="30"
maxWaitMillis="10000" username="user" password="password"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://x.x.x.x:3306/dbname;" />
在我的web.xml中
<resource-ref>
<description>DB Connection</description>
<res-ref-name>${db.context}</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在我的pom.xml中
<profile>
<id>dev</id>
<properties>
<db.context>jdbc/db-dev</db.context>
</properties>
</profile>
而在Java中
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup(ENV);
DataSource ds = (DataSource) envContext.lookup("jdbc/db"); // jdbc/db-??? is the issue
return ds.getConnection();
} catch (NamingException e) {
throw new SQLException(e);
}
还有一个问题,在Java中,我有一个固定的字符串值,仅指向一个资源。 我知道我可以在构建过程中创建一个属性文件,但是对于一个值来说似乎有点多。 有没有一种方法可以让resource-ref指向与上下文xml不同的资源,而只有一个引用名称?
我发现的另一种方法是拥有不同的资源文件,可能每个配置文件都可以包含和排除该文件,但尚未深入了解,但也许有一个更简单的解决方案,我现在看不到。
我希望每个环境都具有相同的二进制文件(在这种情况下,即WAR),以便遵循“构建一个,经常部署”的CI / CD原则。 然后,将以某种方式注入依赖于环境的配置,例如在启动应用程序或外部配置文件时通过环境变量,JVM选项。
由此 ,Tomcat支持在其配置文件中使用${xxxx}
进行变量替换:
Tomcat配置文件的格式设置为无模式XML。 元素和属性区分大小写。 支持Apache Ant样式的变量替换; 可以使用语法$ {propname}在配置文件中使用名称为propname的系统属性。 所有系统属性均可用,包括使用-D语法设置的属性,由JVM自动提供的属性以及在$ CATALINA_BASE / conf / catalina.properties文件中配置的属性。
因此, context.xml
可能看起来像:
<Resource name="jdbc/db" auth="Container"
type="javax.sql.DataSource" maxTotal="1000" maxIdle="30"
maxWaitMillis="10000" username="${DB_USER}" password="${DB_PASSWORD}"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://${DB_HOST}/dbname;" />
然后在启动tomcat等时,将${DB_USER}
, ${DB_PASSWORD}
和${DB_HOST}
为环境变量或JVM选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.