Я обнаружил, что для моего случая оказалось гораздо проще (и я думаю, лучше) принять решение во время выполнения, следует ли использовать тестовую или производственную базу данных, и я решил это следующим образом:
В моем application-context.xml
я создал два bean-компонента вместо одного, по одному для каждой БД (я должен был поместить их ниже «корневых» bean-компонентов, иначе я получил ошибки при сборке):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.5.xsd">
<beans profile="prod">
<mongo:db-factory id="mongoDbFactory" dbname="mongoprod"/>
<mongo:mapping-converter id="mongoConverter" base-package="my.company.project">
<mongo:custom-converters base-package="my.company.project"/>
</mongo:mapping-converter>
<mongo:gridFsTemplate bucket="images" converter-ref="mongoConverter" db-factory-ref="mongoDbFactory"/>
</beans>
<beans profile="test">
<mongo:db-factory id="mongoDbFactory" dbname="mongotest"/>
<mongo:mapping-converter id="mongoConverter" base-package="my.company.project">
<mongo:custom-converters base-package="my.company.project"/>
</mongo:mapping-converter>
<mongo:gridFsTemplate bucket="images" converter-ref="mongoConverter" db-factory-ref="mongoDbFactory"/>
</beans>
</beans>
Чтобы создание файла .war работало правильно, мне пришлось установить enabled
на true
в моем файле build.gradle здесь:
war {
enabled = true //without this no .war file was created before - https://stackoverflow.com/a/52315049/4120196
dependsOn 'lessc', 'webpack'
from "$buildDir/webapp"
exclude 'WEB-INF/js/main.js'
rename 'main\\.min\\.js', 'main.js'
}
Затем я создал файл .war, скопировал его и переименовал - так у меня было два: prod.war
и test.war
и поместил их в мою папку Tomcat 8.5_Tomcat8.5.23\webapps
(я работаю на Win10, если он отличается другие системы). Затем я создал два XML-файла с тем же именем, что и .war-файлы, в которых я определил весенний профиль, который решает, какой бин принимать в Tomcat 8.5_Tomcat8.5.23\conf\Catalina\localhost
:
prod.xml
<Context>
<Environment name="spring.profiles.active" value="prod" type="java.lang.String" override="false" />
</Context>
test.xml
<Context>
<Environment name="spring.profiles.active" value="test" type="java.lang.String" override="false" />
</Context>
Я запустил Tomcat и, наконец, все заработало, как я хотел.
Если у вас есть какие-либо советы, как моё решение может быть улучшено, не стесняйтесь комментировать:)
Я чувствую, что мое application-context.xml может быть как-то сокращено, например ...