通过构建脚本更改mongo dbname

问题描述 投票:0回答:2

我想要什么: 我想建立一个自动部署管道 - 我的计划如下: 我创建了两个.war文件,让我们称之为prod.wartest.war,使用gradle构建脚本,并将它们部署到我的tomcat服务器。

我的问题: prod.war需要访问生产数据库(mongoprod),test.war需要访问测试数据库(mongotest)。

我的尝试: 我以为我可以使用Spring配置文件,只需...

  1. ...改变我的application-context.xml中的一行: <mongo:db-factory id="mongoDbFactory" dbname="mongoprod"/> 至: <mongo:db-factory id="mongoDbFactory" dbname="${mongo.db.name}"/>
  2. ...在同一个文件夹中创建两个文件(<filename><content>): application-production.propertiesmongo.db.name=mongotest application-test.propertiesmongo.db.name=mongoprod
  3. ...执行一些gradle构建脚本,其参数可以将配置文件更改为productiontest,然后使用相应的.property文件插入所需的mongo dbname ...但这就是我运气不好的地方! 我试着把它添加到我的build.gradle文件中: bootRun { args = ["--spring.profiles.active=" + profiles] } 然后用$ ./gradlew bootRun -Ptest运行它 但我得到错误: Main class name has not been configured and it could not be resolved 除此之外我还没有使用过bootRun,到目前为止只有一个war任务来创建我的.war文件: war { archiveName = 'application.war' dependsOn 'lessc', 'webpack' from "$buildDir/webapp" exclude 'WEB-INF/js/main.js' rename 'main\\.min\\.js', 'main.js' }

有谁知道我怎么能让我的问题起作用或者能给我有用的信息吗?

spring mongodb gradle
2个回答
1
投票

您需要提供由bootRun任务运行的主类名,例如,如下所示:

springBoot {
    mainClassName = 'org.baeldung.DemoApplication'
}

你可以在这个qazxsw poi中阅读更多相关信息

更新:

应用程序插件的配置可以如下完成

tutorial

正如在application { mainClassName = 'org.gradle.sample.Main' } 所说的那样


0
投票

我发现,对于我的情况来说,事实证明在运行时期间更容易(并且我认为更好),应该使用测试或生产数据库并且我通过以下方式解决它: 在我的plugin docs中,我创建了两个bean而不是一个,每个DB一个(我必须将它们嵌套在“root”-beans下面,否则我在构建期间会出错):

application-context.xml

为了使.war文件创建正常工作,我必须在我的build.gradle文件中将<?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> 设置为enabled

true

然后我创建了一个.war文件,复制它并重命名它 - 所以我有两个: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' } prod.war并将它们放入我的test.war文件夹(我正在使用Win10,以防其他系统有所不同)。然后我创建了两个与.war文件同名的.xml文件,我在其中定义了弹簧配置文件,决定在Tomcat 8.5_Tomcat8.5.23\webapps中使用哪个bean: 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

我启动了tomcat,最后一切都按照我的意愿运行。

如果您有任何提示我的解决方案如何改进,请随时评论:) 我觉得我的application-context.xml可能会以某种方式缩短,例如......

© www.soinside.com 2019 - 2024. All rights reserved.