У меня есть приложение, работающее на 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 у меня есть фиксированное строковое значение, указывающее только на один ресурс.Я знаю, что я мог бы создать файл свойств во время сборки, но только для одного этого значения это кажется слишком многим.Есть ли способ, чтобы ссылка на ресурс ссылалась на другие ресурсы из контекста xml, имея только одно ссылочное имя?
Другой метод, который я нашел, - это иметь разные файлы ресурсов, которые я могу включать и исключать, вероятно, для каждого профиля.Я еще не слишком увлекся этим, но, может быть, есть гораздо более простое решение, которого я сейчас не вижу.